Fragmentの使い方が誤っていないかをチェックする FragmentStrictMode
について簡単に紹介します。
Fragment 1.4.0-alpha02で導入されています。
(今回は1.4.0-alpha03で検証しています。
android.os.StrictMode
のFragment版という感じになります。
誤りを検出してLog出力する
簡単な例として、 <fragment>
タグを使用してる場合にログ出力する実装です。
FragmentStrictMode.Policy
を作って、それを setDefaultPolicy
でセットしている感じになります。
実装はApplicationクラスで設定しておくと良いともいます。
Policyについてはいくつかありますが、どういったのがあるかは後ほど紹介ます。
もし、レイアウトxmlで <fragment>
を使ってる箇所がある場合は、以下のようなログが出力されるようになります。
誤りを検出したらクラッシュさせる
ログ出力ではなく、誤りを検出したらクラッシュしたい場合は、 penaltyDeath()
を使うだけです。
これで誤りを検出したときはクラッシュするようになるので、気づくことができますが、プロダクションコードには含めないほうが良いかなと。
誤りの検出イベントを受け取る
ログやクラッシュではなく、独自の処理をしたい場合は penaltyListener
で検出のイベントを受信することができます。
渡されてくるのは検出した誤りの Violation
クラスになります。
特定のFragmentでの誤りを許容する
特定のFragmentでは誤りを検出しないようにするには allowViolation
を使って、対象のFragmentクラスとViolationクラスを指定します。
検出できる誤り
Violation
クラスのサブクラスにまとまっています。
以下のコードではすべての誤りを検出するようになります。
<fragment>
タグを使ってたり、削除後に再利用されたり、 retainInstance
を使用していたり、などが検出できるようになっています。