0

我有一个 android 应用程序,我按照http://developer.android.com/training/animation/screen-slide.html进行设置。

但是,我在 ViewPager 中有很多片段(不是一次),我想在我不在它们的时候销毁它们。从长远来看,每次调用 ViewPager 的 getItem(int position) 时都会创建一个片段 - 大约是 365 次(一年中的每一天)。一切都很好,直到我将 ImageView 添加到其中一个页面(在它的末尾总共 12 个......),现在如果我尝试查看这些页面片段中的 3 个,我的内存就会用完。

我的问题是,当片段不是当前页面时,如何删除/销毁片段?我尝试弹出 FragmentManager 的 BackStack,但这不起作用(BackStack 中似乎没有任何内容,但话又说回来 - 我可能在错误的地方调用它,即 getItem() 函数)

我会提供代码,但是要查看重要部分的代码很多。它与上面链接中的教程具有完全相同的结构。

谢谢

4

1 回答 1

0

如果在将 imageViews 添加到 pager 后出现内存问题,为什么不关注为刚刚添加到应用程序的 imageView 构建的位图的内存方面?

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

请注意,来自设备相机的图片可能非常非常大,并且会很快导致内存问题,IMO 您应该首先关注这一点。

IMO ,标准 ViewPager 和标准 Adapter 在管理内存方面是可以的,即使你有很多 Fragment 循环通过寻呼机。

而且,由于分页器和适配器之间协作的细节量,显式销毁页面、在 ViewPager 中重新加载片段的问题有点复杂。

如果您想自己承担适配器和寻呼机的复杂性,则需要进入寻呼机和您选择的适配器的源代码:

 * {@link android.support.v4.app.FragmentStatePagerAdapter},
 * {@link android.support.v13.app.FragmentStatePagerAdapter};

正如您从有关在 ViewPager 中管理片段主题的许多帖子中看到的那样,仅在适配器上调用“destroyItem()”或在调用 notifyDataSetChanged() 之前简单地从绑定到适配器的 ListArray 中删除片段是不够的适配器。您还必须确切地知道 getItemPosition 的操作如何与ViewPager一起工作,以便获得您想要的结果。

通过 ViewPager 方法可能需要花费大量时间。

如果可以通过首先关注位图来解决它。

于 2013-08-31T15:26:57.790 回答