instagram android 是如何实现导航的?
How does instagram android implement the navigation?
我正在构建一个 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)
Heap Dump Result (Screenshot)
问题
如何在 Android 平台上实现类似 Instagram 的导航?
有多种方法可以做到这一点:
- 使用页面适配器,其中每个页面都可以被视为将包含一堆子片段的根片段。
- 与上述类似,但不使用适配器。使用多个根片段,这些片段会在用户切换选项卡时被换出。
发生 OOM 错误的原因有很多。
1. 随着片段的堆积,每个片段都保留了一些数据。您可能希望保存状态并恢复数据以节省内存。
2. 使用页面适配器可能会导致此问题,因为页面适配器可以使片段保持活动状态,即使它们当前不可见。
尝试 运行 您的应用并研究 HPROF 文件以获取内存使用情况的线索。
我正在构建一个 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)
Heap Dump Result (Screenshot)
问题
如何在 Android 平台上实现类似 Instagram 的导航?
有多种方法可以做到这一点:
- 使用页面适配器,其中每个页面都可以被视为将包含一堆子片段的根片段。
- 与上述类似,但不使用适配器。使用多个根片段,这些片段会在用户切换选项卡时被换出。
发生 OOM 错误的原因有很多。 1. 随着片段的堆积,每个片段都保留了一些数据。您可能希望保存状态并恢复数据以节省内存。 2. 使用页面适配器可能会导致此问题,因为页面适配器可以使片段保持活动状态,即使它们当前不可见。
尝试 运行 您的应用并研究 HPROF 文件以获取内存使用情况的线索。