Android 获取错误:“quot;java.lang.IllegalStateException:活动已被销毁;执行viewPager适配器的NOTIFYDATASETCHANGE时

Android 获取错误:“quot;java.lang.IllegalStateException:活动已被销毁;执行viewPager适配器的NOTIFYDATASETCHANGE时,android,android-viewpager,illegalstateexception,Android,Android Viewpager,Illegalstateexception,我正在从onActivityResult(…)方法中的活动类调用视图寻呼机适配器的notifyDataSetChanged()。我面临“致命异常:java.lang.IllegalStateException:活动已被销毁 “仅在某些设备中发生错误。下面是堆栈跟踪 Fatal Exception: java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentMa

我正在从onActivityResult(…)方法中的活动类调用视图寻呼机适配器的notifyDataSetChanged()。我面临“致命异常:java.lang.IllegalStateException:活动已被销毁 “仅在某些设备中发生错误。下面是堆栈跟踪

Fatal Exception: java.lang.IllegalStateException: Activity has been destroyed
   at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1515)
   at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
   at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:621)
   at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
   at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:1003)
   at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2996)
   at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:279)
   at com.demo.activities.ActivityMain$1.run(ActivityMain.java:180)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6351)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:896)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
视图寻呼机仅包含两个片段(v4)。我在执行NOTIFYDATASETCHANGE的代码行中得到错误

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == 100) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mViewPager.getAdapter().notifyDataSetChanged();
            }
        }, 1000);
    }}

我是否需要在run方法中执行任何检查以检查活动是否仍然存在以避免此异常?

无论何时延迟访问实例变量或上下文,还是在回调中,都应首先检查其存在性

用于活动

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if(!isFinishing())
            mViewPager.getAdapter().notifyDataSetChanged();
        }
    }, 1000);
用于片段

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if(isAdded())
            mViewPager.getAdapter().notifyDataSetChanged();
        }
    }, 1000);

无论何时延迟访问实例变量或上下文,或者在回调中访问实例变量或上下文,都应该首先检查其存在性

用于活动

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if(!isFinishing())
            mViewPager.getAdapter().notifyDataSetChanged();
        }
    }, 1000);
用于片段

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if(isAdded())
            mViewPager.getAdapter().notifyDataSetChanged();
        }
    }, 1000);