美文网首页
2018-07-24 java.lang.IllegalStat

2018-07-24 java.lang.IllegalStat

作者: AndroidTalent | 来源:发表于2018-07-24 16:43 被阅读0次

    错误:

    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()方法:

    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.with方法竟然在super.onCreate(savedInstanceState);之前。。。

    显然Glide.with调用时mHost还没有赋值,所以抛了异常IllegalStateException。。。

    继承的activity,super.onCreate(savedInstanceState)一定要最先调用,切记切记!!!!!

    相关文章

      网友评论

          本文标题:2018-07-24 java.lang.IllegalStat

          本文链接:https://www.haomeiwen.com/subject/lcgemftx.html