阅读背景:

单例 fragment getChildFragmentManager java.lang.IllegalStateException: No activity

来源:互联网 

错误提示如下:

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

错误提示如下:

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
后发现https://code.google.com/p/android/issues/detail?id=42601
如下:

Sign in to add a comment
 	
Reported by [email protected], 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();
		}
	}








.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:Coolpad11-27 14:47:34.983: D/CrashHandler



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: