我在尝试展示java.lang.IllegalStateException
时收到DialogFragment
。这是显示此对话框的流程:
LocalBroadcast Intent
,向Broadcast
Activity
Activity
处理Broadcast
并检查应用是否位于前台DialogFragment
我认为检查应用程序是否在前台是否足以处理此错误?
处理此IllegalStateException
的正确方法是什么?
活动w /显示对话框方法
public void showUpdateAppDialog() {
if (Helpers.isAppInForeground(this)) {
mUpdateAppDialog = UpdateAppDialog.newInstance();
mUpdateAppDialog.show(mFm, GlobalVars.TAG_UPDATE_APP_DIALOG);
}
}
带有响应处理程序的Android Volley HTTP Post调用
public void versionCheck() {
try {
JSONObject obj = new JSONObject();
obj.put(GlobalVars.KEY_PLATFORM, "android");
obj.put(GlobalVars.KEY_VERSION, Integer.toString(mPrefs.getAppVersion()));
Response.Listener<JSONObject> responseListener = new Response.Listener<JSONObject>() {
@Override
public void onResponse(final JSONObject response) {
Log.v(TAG_VOLLEY_RESPONSE, GlobalVars.DEST_VERSION_CHECK + ": " + response.toString());
new Thread(new Runnable() {
public void run() {
boolean updated = false;
try {
if (doesResponseContainError(response)) return;
if (response.has(GlobalVars.EVENT_VERSION_CHECK)) {
updated = Boolean.valueOf(response.getString(GlobalVars
.EVENT_VERSION_CHECK));
}
}
catch (JSONException e) { e.printStackTrace(); }
finally {
Intent intent = new Intent(GlobalVars.EVENT_RECEIVER);
intent.putExtra(GlobalVars.KEY_EVENT, new ArrayList<>(Arrays.asList(
GlobalVars.EVENT_HIDE_UPDATING_ICON,
GlobalVars.EVENT_VERSION_CHECK)));
intent.putExtra(GlobalVars.KEY_IS_UPDATED, updated);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
}
}).start();
}
};
sendPost(GlobalVars.DEST_VERSION_CHECK, obj, GlobalVars.DEST_VERSION_CHECK, responseListener);
}
catch (JSONException e) { e.printStackTrace(); }
}
app是否在前台检查
public static boolean isAppInForeground(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
return tasks.get(0).processName.equalsIgnoreCase(context.getPackageName());
}
堆栈跟踪
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1365)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1383)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:138)
at com.walintukai.lovelup.MainActivity.showUpdateAppDialog(MainActivity.java:991)
at com.walintukai.lovelup.MainActivity.onVersionCheck(MainActivity.java:1269)
at com.walintukai.lovelup.MainActivity.access$1200(MainActivity.java:90)
at com.walintukai.lovelup.MainActivity$10.onReceive(MainActivity.java:1142)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5748)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(NativeStart.java)