さて、すっかりとandroid開発になくてはならなくなったfragmentですが、どうも挙動や
メモリ管理に???なことが多々起こるので調査することにしました。
調査はandroid-support-v4.jarで行いました。違うversionを利用しているかたは注意してください。
さて、ListFragmentを使って挙動を確認します。
FragmentActivityを継承したクラスでListFragmentを継承したクラスを実体化します。
sample1 : FragmentActivity screen is displayed!!
    onCreateView
        ↓
    onActivityCreated
        ↓
    onStart
        ↓
    onResume
上記のような場合は、onCreateViewでviewを作り、onActivityCreatedでデータを設定するのが典型的なパターンでしょう。
さて、次に表示されているFragmentActivity画面で、デバイスの戻るボタンを押します。
sample2 : Device back is pushed!!
    onPause
        ↓
    onStop
        ↓
    onDestroyView
        ↓
    onDestroy
        ↓
    onDetach
色々と呼び出されましたね。
しかし、これではよくわかりません。なので、FragmentActivity画面で、ホームボタンを押します。
sample3 : Home button is pushed!!
    (onSaveInstanceState)
        ↓
    onPause
        ↓
    onStop
画面がユーザーから見えなくなると上記の二つのメソッドが呼び出されるわけです。
さて、再びアプリを立ち上げます。
sample4 : Application is relaunched
    onStart
        ↓
    onResume
activityと同じ挙動ですね。理解しやすいです。
縦横画面対応かつ、ユーザーの入力項目がある場合は、ここでonSaveInstanceStateで保存したデータの詰め替えをおこなうと良いでしょう。通常は無視で問題ないです。
ListFragmentは列表示に使うので、他のFragmentActivity画面に遷移します。
sample5 : Next screen is called!!
    (onSaveInstanceState)
        ↓
    onPause
        ↓
    次画面の処理
        ↓
    onStop
onPauseとonStopの間に次の画面の処理が入るのに注意してください。
最後に前の画面に戻ります。sample6 : Prev screen is backed!!
    onStart
        ↓
    onResume
上記の流れがわかれば、挙動でほとんど困ることはないでしょう。
ガーベッジコレクションのみに依存するとろくなことにならないので、コードが煩雑にならない程度に、適切にオブジェクトを破棄しましょう。
あくまで「電話」だという認識を忘れないようしましょう。
メモリは大切にね。

 
 
0 件のコメント:
コメントを投稿