为什么无中断片段在onResume中有时为空

时间:2013-11-26 04:49:02

标签: android android-fragments onresume

我有无UI片段portfolioArrayFragmentsetRetainInstance(true)

然而,在非常罕见的情况下,它有时会在onResume中变为空。我从Google Developer Console获得了一次崩溃报告。我曾尝试过多种方法来重现崩溃,但却无法实现。


  1. 继续旋转设备。将触发onCreateonResume

    1. 按HOME按钮。
    2. 长按HOME按钮。选择应用程序。 onResume将被触发。

      1. 按HOME按钮。
      2. 推出其他5款应用。
      3. 长按HOME按钮。选择应用程序。将触发onCreateonResume

      4. 即使在portfolioArrayFragment期间我仍然无法获得空onResume。知道为什么会出现这种情况吗?

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        
            final FragmentManager fm = this.getFragmentManager();
            this.portfolioArrayFragment = (PortfolioArrayFragment)fm.findFragmentByTag(PORTFOLIO_ARRAY_FRAGMENT);
            if (this.portfolioArrayFragment == null) {
                this.portfolioArrayFragment = PortfolioArrayFragment.newInstance();
                fm.beginTransaction().add(this.portfolioArrayFragment, PORTFOLIO_ARRAY_FRAGMENT).commitAllowingStateLoss();
            } else {
            }
        }
        
        @Override
        public void onResume() {
        
            super.onResume();
        
            // SOMETIMES, this.portfolioArrayFragment IS NULL AND I HAVE NO IDEA WHY?!
        
            if (this.portfolioArrayFragment.buyArray == null) {
                // Prepare the loader.  Either re-connect with an existing one,
                // or start a new one.
                getLoaderManager().initLoader(0, null, getBuyArrayLoaderCallbacks());                
            } 
        
        }
        

2 个答案:

答案 0 :(得分:0)

您必须从 onCreate 方法中删除所有代码并将其添加到 onResume ,因为每次首次加载应用程序/活动或恢复应用程序/活动时都会调用onResume方法。

答案 1 :(得分:0)

您正在

中添加新片段
fm.beginTransaction().add(this.portfolioArrayFragment, PORTFOLIO_ARRAY_FRAGMENT).commitAllowingStateLoss();

<强> From android documentation

  

提交不会立即发生;它将被安排为工作   在下一次线程就绪时要完成的主线程上。

因此,如果您的片段事务仍处于未决状态,您将在onResume()中获取NULL,您可以做的是在提交事务之后但在通过标记查找之前尝试运行fragmentManager.executePendingTransactions(),看看它是否适合您。