FragmentのStrictMode

Kenji Abe
Jun 22, 2021
Photo by Kind and Curious on Unsplash

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 を使用していたり、などが検出できるようになっています。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO