首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >illegalStateException in onLoadFinishe

illegalStateException in onLoadFinishe
EN

Stack Overflow用户
提问于 2021-12-02 08:15:06
回答 1查看 44关注 0票数 0

android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1886) at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1905) at android.app.BackStackRecord.commitInternal(BackStackRecord.java:688) at android.app.BackStackRecord.commit(BackStackRecord.java:646) at android.app.DialogFragment.dismissInternal(DialogFragment.java:312) at android.app.DialogFragment.dismiss(DialogFragment.java:278),java.lang.IllegalStateException无法在onLoadFinished内部执行此操作

为什么我要让我的一些用户在游戏商店控制台崩溃。这不是设备或操作系统特定的。

我不会在onLoadFinished中做任何与UI相关的事务。我正在执行ABCAsyncTask,在它的onPostExecute中,我调用pausehandler来执行UI。

另外,由于我使用两个游标,所以onLoadFinished在这里调用了两次。

代码语言:javascript
复制
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    if (cursor == null) {
        Log.e(LOG_TAG, "cursor is null");
        return;
    }


    (new ABCAsyncTask(this, cursorLoader, cursor)).execute();
}

ABCAsyncTask ->

代码语言:javascript
复制
 onPostExecute() {
    LoadItemPauseHandlerObject loadItemPauseHandlerObject = new LoadItemPauseHandlerObject ();
    Message responseMessage = new Message();
    responseMessage.what = 1; // some int
    responseMessage.obj = loadItemPauseHandlerObject;
    pauseHandler.sendMessage(responseMessage);
    }

在android中,来源代码:

代码语言:javascript
复制
void callOnLoadFinished(Loader<Object> loader, Object data) {
if (mCallbacks != null) {
String lastBecause = null;
if (mHost != null) {
lastBecause = mHost.mFragmentManager.mNoTransactionsBecause;
                    mHost.mFragmentManager.mNoTransactionsBecause = "onLoadFinished";
}
try {
if (DEBUG) Log.v(TAG, "  onLoadFinished in " + loader + ": "
+ loader.dataToString(data));
                    mCallbacks.onLoadFinished(loader, data);
                } finally {
if (mHost != null) {
mHost.mFragmentManager.mNoTransactionsBecause = lastBecause;
}
}
mDeliveredData = true;
}
}

由于最后{}块总是在尝试{}块之后在主线程中同步执行,而在onLoadFinished()中,我没有直接执行任何片段事务,所以,mNoTransactionsBecause应该重置为lastBecause,那么为什么我的一些用户会出现这种崩溃呢?

我正在使用:

android.app.LoaderManager android.app.Activity android.app.Fragment

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-02 08:36:49

尝试添加检查

代码语言:javascript
复制
isAdded()

在您的handleMessage()方法中,您的handler可能在您的Fragment中。如果你还有疑问,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70196057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档