簡體   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