2012年3月13日火曜日

Android FragmentTransaction で commitAllowingStateLoss を使う

FragmentTransaction クラスの commitAllowingStateLoss() メソッドは commit() に似ていますが、Activity の状態が保存された後でないと commit が実行されません。
Activity が後でその状態から復元する必要がある場合、コミットが失われる可能性があるので注意が必要です。そのため、ユーザーによって UI 状態が不意に変更されても問題ない場合にのみ使用します。

FragmentTransaction#commitAllowingStateLoss() は FragmentManager の executePendingTransactions() メソッドと組み合わせて使うことが多いです。

  1. @Override  
  2. public void finishUpdate(ViewGroup container) {  
  3.     if (mCurTransaction != null) {  
  4.         mCurTransaction.commitAllowingStateLoss();  
  5.         mCurTransaction = null;  
  6.         mFragmentManager.executePendingTransactions();  
  7.     }  
  8. }  


FragmentTransaction.commit() で FragmentTransaction がコミットされたあと、これらの処理はメインスレッドで非同期に実行されるようスケジュールされます。
これら保留中の操作をただちに実行したい場合 FragmentManager の executePendingTransactions() メソッドを呼び出します。ただし呼び出せるのはメインスレッドからのみです。全ての関連するコールバックや他の振る舞いはこの呼び出し中に行われるため、呼び出し元では(ANRにならないように)注意が必要です。


0 件のコメント:

コメントを投稿