KeyguardManager によるメモリリークはグーグルのバグらしい
KeygurardManagerによるメモリリークが確認された。どうやってこれを解消すればいいか検討したが、結論からいうと、どうやらこれはグーグルのバグで、解消できない可能性が高そうだ。(もし詳しい方がおられたら教えてください) ---------------------------- アプリを作ったら、メモリリークがないか確認しなければならない。 メモリリークとは、アプリが確保したメモリが不要になっても解放されないままになることで、使えるメモリが減ってしまい不具合の原因となる。その確認のためにリークキャナリー(LeakCanary)を入れて確認することが広く行われている。 リークキャナリーの入れ方についてはこちら。非常に簡単である。 https://zenn.dev/yass97/articles/e25960d5511c30 ただ、その読み方はちょっと難しい。今回確認されたリークは次のようなもの。 これを見ていくと、上から1/3くらいのところにKeyguardManager とあり、また、下から1/3くらいのところにAlarmActivityとある。さらにそのすぐ下にLeakinng:YES とあるので、結局、AlarmActivityというアクティビティの中にある、KeyguardManagerのインスタンスにリークがあるということなのだ。 ちなみに、KeyguardManager とは、スマホのロックを管理するクラスで、私は目覚まし時計を作る際に、スマホがロックされていてもアラームの画面だけは表示できるようにするために使ったのだ。 さて、ではどうやってこのメモリリークを解消するか。 メモリリークは多くの場合、アクティビティ等を閉じる段階(onPauseやonDestroy)において、リークの原因となっているオブジェクトを解放し、nullにしてやることで解消できる。このブログでも次のような例について、メモリリークが解消できたことを報告した。 https://marsh-mashro.blogspot.com/2023/08/broadcastreceiver.html https://marsh-mashro.blogspot.com/2023/08/handler.html しかしKeyguardManagerのメモリリークはこのような方