我正在构建一个Android应用,其导航类似于Instagram,它有多个标签,每个标签都有自己的历史记录。
我使用ViewPager
FragmentPagerAdapter
来实现此导航。在向下导航每个标签时,我会通过执行以下代码来替换FrameLayout
的内容
getChildFragmentManager.beginTransaction().addToBackStack(null).replace(R.id.container, newFragment).commit()
并执行getChildFragmentManager.popBackStackImmediate()
后退按钮事件。
我使用facebook fresco' SimpleDraweeView
并通过执行SimpleDraweeView.setImageURI(Uri.parse(str))
加载图片。
该应用使用MapView
并创建自定义标记,其中包含由Picasso.with(context).with(url).into(new MarkerTarget(...))
class MarkerTarget implements Target {
private Marker marker;
public MarkerTarget(Marker marker) {
this.marker = marker;
}
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
marker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap));
marker.setVisible(true);
} catch(Exception e) {
}
}
...
}
}
大多数片段都有ListView
,BaseAdapter
的扩展名和演示者。
它似乎工作但问题是当我在选项卡中向下导航时,会发生OOM错误。 Instagram如何保存(可能)无限数字的历史。
Allocation Tracker Result (Screenshot)
如何在Android平台上实现Instagram导航?
答案 0 :(得分:0)
有多种方法可以做到这一点:
由于一系列原因,可能会发生OOM错误。 1.当碎片堆积起来时,每个碎片都会保留一些数据。您可能希望保存状态并恢复数据以节省内存。 2.使用页面适配器可能会导致这种情况,因为页面适配器可以使片段保持活动状态,即使它们当前不可见。
尝试运行应用程序并研究HPROF文件以获取内存使用情况的线索。