错误提示如下:
11-27 14:47:34.983: D/CrashHandler(8105): handleException-->java.lang.IllegalStateException: No activity
11-27 14:47:34.983: D/CrashHandler(8105): 程序即将退出
11-27 14:47:34.983: D/CrashHandler(8105): main
11-27 14:47:34.990: W/System.err(8105): java.lang.IllegalStateException: No activity
11-27 14:47:35.014: D/dalvikvm(8105): GC_CONCURRENT freed 1916K, 63% free 5387K/14407K, external 6306K/7682K, paused 4ms+6ms
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1514)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
11-27 14:47:35.108: W/System.err(8105): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
11-27 14:47:35.108: W/System.err(8105): at android.os.Handler.handleCallback(Handler.java:587)
11-27 14:47:35.108: W/System.err(8105): at android.os.Handler.dispatchMessage(Handler.java:92)
11-27 14:47:35.108: W/System.err(8105): at android.os.Looper.loop(Looper.java:130)
11-27 14:47:35.108: W/System.err(8105): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-27 14:47:35.108: W/System.err(8105): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 14:47:35.108: W/System.err(8105): at java.lang.reflect.Method.invoke(Method.java:507)
11-27 14:47:35.108: W/System.err(8105): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:881)
11-27 14:47:35.108: W/System.err(8105): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:639)
11-27 14:47:35.108: W/System.err(8105): at dalvik.system.NativeStart.main(Native Method)
11-27 14:47:35.123: D/CrashHandler(8105): BOARD:CP5832
11-27 14:47:35.123: D/CrashHandler(8105): BOOTLOADER:unknown
11-27 14:47:35.123: D/CrashHandler(8105): BRAND:Coolpad
fragment 单例中调用getChildFragmentManager(),activity destory后再进入该activity fragment中,一直报java.lang.IllegalStateException: No activity
后发现http://code.google.com/p/android/issues/detail?id=42601
如下:
Sign in to add a comment
Reported by andrewys...@gmail.com, Jan 10, 2013
When a Fragment that uses its child FragmentManager (calls getChildFragmentManager()) is detached, performDestroy() calls dispatchDestroy() on the child FragmentManager, with the understanding that the child FragmentManager will no longer be used. However, the parent Fragment retains a reference to the destroyed child FragmentManager, which causes an illegal move to ACTIVITY_CREATED in the child FragmentManager if the parent Fragment is re-attached. Perhaps the child FragmentManager should be set to null after dispatchDestroy() is called, to force it to be regenerated when the parent Fragment is re-attached. An alternate best practice appears to be to not keep references to detached Fragments that have used their child FragmentManagers.
This behavior has been observed in both the support v4 library and in the standard API (android.app.Fragment). The stack trace shown below belongs to API level 17 for the attached sample code.
java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.self/edu.self.A}: java.lang.IllegalStateException: No activity
解决方法
fragment 中
@Override
public void onDestroy() {
super.onDestroy();
// 将fragment中的变量mChildFragmentManager清空
try {
Field f = Fragment.class.getDeclaredField("mChildFragmentManager");
f.setAccessible(true);
f.set(this, null);
} catch (Exception e) {
e.printStackTrace();
}
}