java.lang.IllegalStateException:Activity has been destroyed原因検索


エラー:
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1555)

at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696)

at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:667)

at com.bumptech.glide.manager.RequestManagerRetriever.getSupportRequestManagerFragment(RequestManagerRetriever.java:187)

at com.bumptech.glide.manager.RequestManagerRetriever.supportFragmentGet(RequestManagerRetriever.java:195)

at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:104)

at com.bumptech.glide.Glide.with(Glide.java:644)

at com.meinong.activity.PickPhotoPreviewActivity.setRootView(PickPhotoPreviewActivity.java:51)

at org.mn.frame.MNActivity.onCreate(MNActivity.java:141)

at android.app.Activity.performCreate(Activity.java:6875)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)

at android.app.ActivityThread.-wrap12(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:163)

at android.app.ActivityThread.main(ActivityThread.java:6221)

at java.lang.reflect.Method.invoke(Method.java)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.meinong.test/com.meinong.activity.PickPhotoPreviewActivity}: java.lang.IllegalStateException: Activity has been destroyed
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2706)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)

at android.app.ActivityThread.-wrap12(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:163)

at android.app.ActivityThread.main(ActivityThread.java:6221)

at java.lang.reflect.Method.invoke(Method.java)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

ネット上でこの間違いと関係があるのはすべてfragmentのactivityがありますが、私のactはfragmentがないので、原因がどこにあるのか分かりません.
ソースコードを一歩一歩見て異常に投げ出された位置がandroidにある.support.v4.app.FragmentManagerImplのenqueueAction()メソッド:
public void enqueueAction(Runnable action,boolean allowStateLoss) {
if (!allowStateLoss) {
checkStateLoss();
}
synchronized (this) {
if (mDestroyed ||mHost ==null) {
throw new IllegalStateException(“Activity has been destroyed”);
}
if (mPendingActions ==null) {
mPendingActions =new ArrayList();
}
mPendingActions.add(action);
if (mPendingActions.size() ==1) {
mHost.getHandler().removeCallbacks(mExecCommit);
mHost.getHandler().post(mExecCommit);
}
}
}
mDestroyedはtrueまたはmHost=nullに等しい.
引き続きmHostの付与を追跡するには、FragmentManagerImplのattachController()メソッドが1つしかありません.
public void attachController(FragmentHostCallback host,
FragmentContainer container, Fragment parent) {
if (mHost !=null)throw new IllegalStateException(“Already attached”);
mHost = host;
mContainer = container;
mParent = parent;
}
mHost = host; –一方、attachControllerの呼び出しはFragmentControllerのattachHost()メソッドにあります.
public void attachHost(Fragment parent) {
mHost.mFragmentManager.attachController(
mHost,mHost/container/, parent);
}
の呼び出しは、FragmentActivity()のoncreateの最初の行にあります.
しかし、FragmentActivityのクラス呼び出しGlideを継承することに気づいた.方法は何だ?onCreate(savedInstanceState);前に...
明らかにwith呼び出し時にmHostはまだ値付けされていないので、異常IllegalStateExceptionを投げました..
引き継いだonCreate(savedInstanceState)は必ず最初に呼び出して、覚えておいて!!!