为什么建议不要在UI中保留片段?

布拉卡达布拉

我读到,保留带有ui的片段以及对视图的引用可能会导致内存泄漏。比起我创建带有片段的测试应用程序而言,我将一些引用存储在视图上并设置setRetaineInstance(true),但是多次旋转屏幕不会引起任何泄漏。MAT说我只有一个家长活动实例。我做错了什么?在哪种情况下,使用ui保留片段会导致泄漏?

RetainInstanceActivity.java

public class RetainInstanceActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, RetainFragment.newInstance())
                .commit();
    }
}}

RetainFragment.java

public class RetainFragment extends Fragment {

private View mLogin;
private View mPassword;
private View ImageView;

public static RetainFragment newInstance() {
    final RetainFragment fragment = new RetainFragment();

    return fragment;
}

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);        
}

@Override
public View onCreateView(final LayoutInflater inflater,
        final ViewGroup container, final Bundle savedInstanceState) {       
    final View view = inflater.inflate(R.layout.fragment_retain, container,
            false);

    mLogin = view.findViewById(R.id.login);
    mPassword = view.findViewById(R.id.password);
    ImageView = view.findViewById(R.id.img);

    return view;
}

}

雅各布·诺德福克

在这里,您保留了对旧活动的mLogin,mPassword和ImageView视图的引用,但是它们在旋转后立即被覆盖,因为将调用onCreateView(),因此,如果您的活动是前端活动,并且发生配置更改,则应该没事。

但是,如果您的活动不是前台活动,那么您可能会遇到内存泄漏,并且通常您不知道片段的处理方式。

例如,ViewPager有2种不同的适配器,其中一种(http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html)保留Fragment实例(仅调用onDestroyView()),而其他(FragmentStatePagerAdapter)正在销毁片段实例。

因此,如果从FragmentPagerAdapter中使用,您的片段将泄漏大量内存。

我希望这可以作为潜在问题的例子。如果您知道自己在做什么,那么调用setRetaineInstance(true)并不处理视图就没有问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在结构中保留内存?

来自分类Dev

为什么要在 Nexus 中保留多个快照?

来自分类Java

建议我不要在这里使用反射...为什么不呢?

来自分类Dev

回收视图不要在片段中折叠工具栏!为什么?

来自分类Dev

我需要在 Proguard 中保留什么才能运行 ObjectDB?

来自分类Linux

告诉Linux在将文件写入磁盘时不要在高速缓存中保留文件

来自分类Dev

为什么建议不要使用RPM Packager标签?

来自分类Dev

shellcheck建议不要使用basename:为什么?

来自分类Dev

为什么12factor建议不要守护进程?

来自分类Dev

如果元素不存在/是可选元素,请不要在CSS网格中保留空间

来自分类Dev

不要在 Vue、TailwindUI 和 Headless UI 中使用内置或保留的 HTML 元素

来自分类Dev

Android:为什么不建议直接使用片段对象将数据传递给片段?

来自分类Dev

为什么VS Code IntelliSense for Python建议不要对所有相同类型的变量建议自动完成?

来自分类Dev

为什么apt-key手册页建议不要使用其add命令?

来自分类Dev

为什么Adblock Plus的Element Hiding Helper建议不要将规则绑定到每个域?

来自分类Dev

为什么强烈建议不要同时申请和订购组织?

来自分类Dev

不要在自动完成中建议当前目录

来自分类Dev

为什么编译器会警告不要在初始化列表中隐藏成员?

来自分类Dev

python不要在visual studio代碼中保存文件

来自分类Dev

为什么我们要在OnCreate中检查重叠的片段?(来自文档)

来自分类Dev

android-为什么要在主要活动和片段之间进行通信时实现接口

来自分类PHP

为什么我的cookie不能在Laravel中保留(使用Homestead,Vagrant)?

来自分类Dev

为什么在此示例中保留子类型而不使用 out 关键字?

来自分类Linux

为什么连续写入会在缓冲区中保留4K字节?

来自分类Dev

为什么连续写入会在缓冲区中保留4K字节?

来自分类Dev

为什么在Racket中的gvector中保留容量会使性能变差?

来自分类Dev

为什么Visual Studio在项目文件中保留一个空的ItemGroup节点?

来自分类Dev

iOS:我需要在字典ios中保留密钥吗?

来自分类Dev

需要在文本中保留大括号以打印到文件

Related 相关文章

  1. 1

    为什么要在结构中保留内存?

  2. 2

    为什么要在 Nexus 中保留多个快照?

  3. 3

    建议我不要在这里使用反射...为什么不呢?

  4. 4

    回收视图不要在片段中折叠工具栏!为什么?

  5. 5

    我需要在 Proguard 中保留什么才能运行 ObjectDB?

  6. 6

    告诉Linux在将文件写入磁盘时不要在高速缓存中保留文件

  7. 7

    为什么建议不要使用RPM Packager标签?

  8. 8

    shellcheck建议不要使用basename:为什么?

  9. 9

    为什么12factor建议不要守护进程?

  10. 10

    如果元素不存在/是可选元素,请不要在CSS网格中保留空间

  11. 11

    不要在 Vue、TailwindUI 和 Headless UI 中使用内置或保留的 HTML 元素

  12. 12

    Android:为什么不建议直接使用片段对象将数据传递给片段?

  13. 13

    为什么VS Code IntelliSense for Python建议不要对所有相同类型的变量建议自动完成?

  14. 14

    为什么apt-key手册页建议不要使用其add命令?

  15. 15

    为什么Adblock Plus的Element Hiding Helper建议不要将规则绑定到每个域?

  16. 16

    为什么强烈建议不要同时申请和订购组织?

  17. 17

    不要在自动完成中建议当前目录

  18. 18

    为什么编译器会警告不要在初始化列表中隐藏成员?

  19. 19

    python不要在visual studio代碼中保存文件

  20. 20

    为什么我们要在OnCreate中检查重叠的片段?(来自文档)

  21. 21

    android-为什么要在主要活动和片段之间进行通信时实现接口

  22. 22

    为什么我的cookie不能在Laravel中保留(使用Homestead,Vagrant)?

  23. 23

    为什么在此示例中保留子类型而不使用 out 关键字?

  24. 24

    为什么连续写入会在缓冲区中保留4K字节?

  25. 25

    为什么连续写入会在缓冲区中保留4K字节?

  26. 26

    为什么在Racket中的gvector中保留容量会使性能变差?

  27. 27

    为什么Visual Studio在项目文件中保留一个空的ItemGroup节点?

  28. 28

    iOS:我需要在字典ios中保留密钥吗?

  29. 29

    需要在文本中保留大括号以打印到文件

热门标签

归档