8

今天我注意到我的应用程序中有一个奇怪的行为。

当我使用 Eclipse 中的设备视图停止我的应用程序时,就会发生这种情况。有人可以解释一下吗?

即使已经被破坏 ,为什么还要调用onActivityCreated()of ?包含两个s 并为两者生成类似的日志。FragmentActivityMyHomeActivityFragment

在这里,我正在为一个粘贴日志FragmentNullPointerException是次要问题。

我很惊讶为什么从ofonActivityCreated()启动调用堆栈时会调用它?onDestroy()MyHomeActivity

03-05 12:31:21.414: W/System.err(5638): java.lang.NullPointerException
03-05 12:31:21.421: W/System.err(5638):     at **MyListViewFrag.onActivityCreated**(BuddyListViewFrag.java:85)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(FragmentManager.java:1888)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentActivity.onReallyStop(FragmentActivity.java:787)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentActivity.doReallyStop(FragmentActivity.java:764)
03-05 12:31:21.421: W/System.err(5638):     at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:322)
03-05 12:31:21.421: W/System.err(5638):     at MyFragmentActivity.onDestroy(RbrFragmentActivity.java:57)
03-05 12:31:21.421: W/System.err(5638):     at **MyHomeActivity.onDestroy**(MyHomeActivity.java:254)
03-05 12:31:21.421: W/System.err(5638):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2663)
03-05 12:31:21.421: W/System.err(5638):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2694)
03-05 12:31:21.421: W/System.err(5638):     at android.app.ActivityThread.access$2100(ActivityThread.java:117)
03-05 12:31:21.421: W/System.err(5638):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
03-05 12:31:21.421: W/System.err(5638):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 12:31:21.421: W/System.err(5638):     at android.os.Looper.loop(Looper.java:130)
03-05 12:31:21.421: W/System.err(5638):     at android.app.ActivityThread.main(ActivityThread.java:3687)
03-05 12:31:21.429: W/System.err(5638):     at java.lang.reflect.Method.invokeNative(Native Method)
03-05 12:31:21.429: W/System.err(5638):     at java.lang.reflect.Method.invoke(Method.java:507)
03-05 12:31:21.429: W/System.err(5638):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-05 12:31:21.429: W/System.err(5638):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-05 12:31:21.429: W/System.err(5638):     at dalvik.system.NativeStart.main(Native Method)

我正在使用支持库来为Fragmentpre-HoneyComb 设备提供 s,如果这有什么不同的话。

4

1 回答 1

14

经过一些测试和审查FragmentManager.moveToState,我相信当Fragment由 a 处理时FragmentPagerAdapter,之前合并为 savedState 的 a 是不可避免的Fragment(作为在从 DDMS 选项卡中终止进程之前停止应用程序的过程的一部分在 Eclipse 中),必须首先“创建”(用 的术语FragmentManager)才能将其销毁。

这实际上可能是从保存状态重建片段的过程的意外结果。当FragmentActivity正在执行onCreate并被finish()调用时,目的是FragmentActivity停止设置并退出。视觉体验是这种情况发生了,但似乎FragmentManager它自己继续以前存在Fragment的 s 的生命周期,尽管有一些捷径。这个过程似乎执行生命周期方法onActivityCreated,然后执行onDestroyand onDetach,跳过中间的那些。

处理此问题的最佳方法似乎是解决此启动引起的次要问题(在本例中为您的 NPE)。似乎在Fragment生命周期之外还有优化的空间,但是对于 r12 支持库,这种情况似乎是设计的结果。

于 2013-04-09T20:23:48.927 回答