繁体   English   中英

片段的onActivityCreated()在Activity的onDestroy()之后调用

[英]Fragment's onActivityCreated() is called after onDestroy() of Activity

今天我发现我的应用程序中有一个奇怪的行为

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

为什么即使Activity已被销毁,也会调用Fragment onActivityCreated() MyHomeActivity包含两个Fragment并为两者生成类似的日志。

我在这里粘贴一个Fragment日志。 NullPointerException是次要问题。

我很惊讶为什么在从MyHomeActivity onDestroy()启动调用堆栈时调用onActivityCreated()

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)

我正在使用支持库为预装HoneyComb设备提供Fragment ,如果这有任何区别的话。

在对FragmentManager.moveToState进行一些测试和检查之后,我相信当FragmentFragmentPagerAdapter处理时,以前合并到savedState的Fragment是不可避免的(作为在你杀死进程之前停止应用程序的过程的一部分)在eclipse中的DDMS选项卡,必须先被“创建”(在FragmentManager的术语中)才能被销毁。

这实际上可能是从已保存状态重建片段的过程的意外后果。 FragmentActivity正在执行onCreate并且调用了finish() ,意图是FragmentActivity停止设置和退出。 视觉体验是这种情况发生的,但似乎FragmentManager自己继续生存以前存在的Fragment s,albiet和一些捷径。 这个过程似乎执行生命周期方法直到onActivityCreated ,然后执行onDestroyonDetach ,跳过它们之间的那些。

处理此问题的最佳方法似乎是解决此启动导致的次要问题(在本例中为您的NPE)。 看起来在Fragment生命周期中有优势可以进行优化,但是对于r12支持库,情况似乎是设计的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM