instagram android如何实现导航?

时间:2017-01-02 13:21:04

标签: android android-fragments instagram picasso fresco

我正在构建一个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) {

            }
        }

        ...

    }
}

大多数片段都有ListViewBaseAdapter的扩展名和演示者。

问题

它似乎工作但问题是当我在选项卡中向下导航时,会发生OOM错误。 Instagram如何保存(可能)无限数字的历史。

Allocation Tracker Result (Screenshot)

Heap Dump Result (Screenshot)

问题

如何在Android平台上实现Instagram导航?

1 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点:

  1. 使用页面适配器,其中每个页面都可以被视为包含一堆子片段的根片段。
  2. 与上述类似但不使用适配器。使用在用户切换选项卡时换出的多个根段。
  3. 由于一系列原因,可能会发生OOM错误。 1.当碎片堆积起来时,每个碎片都会保留一些数据。您可能希望保存状态并恢复数据以节省内存。 2.使用页面适配器可能会导致这种情况,因为页面适配器可以使片段保持活动状态,即使它们当前不可见。

    尝试运行应用程序并研究HPROF文件以获取内存使用情况的线索。