8

今日、アプリケーションの奇妙な動作に気付きました。

Eclipse から Devices ビューを使用してアプリケーションを停止すると発生します。誰かがそれを説明できますか?

が既に破棄さ れている場合でもonActivityCreated()of がFragment呼び出されるのはなぜですか? には 2 つの が含まれており、両方について同様のログが生成されます。ActivityMyHomeActivityFragment

ここでは、1 つのログを貼り付けていFragmentます。 NullPointerException二次的な問題です。

コール スタックが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)

FragmentHoneyComb 以前のデバイスに s を提供するためにサポート ライブラリを使用していますが、それによって違いが生じる場合があります。

4

1 に答える 1

14

FragmentManager.moveToStateをいくつかテストして確認した後、Fragmentが によって処理されている場合、が以前に savedState に結合されFragmentPagerAdapterたことは避けられないとFragment思います (DDMS タブからプロセスを強制終了する前にアプリを停止するプロセスの一部として) eclipse では)、破棄する前にまず「作成」(の用語でFragmentManager) する必要があります。

これは実際には、保存された状態からフラグメントを再構築するプロセスの意図しない結果である可能性があります。がFragmentActivity実行中onCreateに呼び出されると、がセットアップを停止して終了するfinish()ことが意図されています。FragmentActivity視覚的な経験では、これが発生しますが、いくつかの近道FragmentManagerはありますが、以前に存在した のライフサイクルを継続することは、それ自体で行われているようです。Fragmentこのプロセスは、 までのライフサイクル メソッドを実行してからonActivityCreatedと を実行onDestroyonDetach、その間をスキップしているようです。

これを処理する最善の方法は、この起動によって引き起こされる二次的な問題 (この場合は NPE) に対処することです。ライフサイクルからこれを最適化する余地があるように見えFragmentますが、r12 サポート ライブラリでは、状況は設計の結果のように見えます。

于 2013-04-09T20:23:48.927 に答える