概要
kotlinを使用してAndroidアプリを開発しています。
開発しているアプリはニュースアプリのようなもので、クリップというお気に入り保存機能があります。
アプリ起動時にDBに保存されているクリップ一覧を取得し、lateinitのグローバル変数に保持していますが、一部のユーザーでlateinitがイニシャライズされていないというクラッシュが発生しています。
Unable to start activity ComponentInfo{xxx.xxx.xxx/xxx.xxx.xxx.activity.XXXActivity}: kotlin.UninitializedPropertyAccessException: lateinit property clipList has not been initialized
clipList
はアプリ起動時に取得し、確実に取得しないとアプリを使用できないようにしてあるので、初期化漏れということはないはずです。
メモリ超過によりグローバル変数を保持しているシングルトンクラスが破棄されてしまっているのだと考えています。
具体的な実装は下記に記しますが、applicationクラスを継承しているので破棄されないものと思っていましたが、こういったグローバル変数はどのように保持するのが正解なのでしょうか。
ご教示よろしくお願いいたします。
実装
グローバル変数保持クラス
class MyApp: Application() { // クリップ記事リスト(ClipAdviceは自作モデル) lateinit var clipList: ArrayList<ClipAdvice> override fun onCreate() { super.onCreate() } companion object { val sharedInstance: MyApp by lazy { MyApp() } } }
グローバル変数にアクセスしているコード
MyApp.sharedInstance.clipList.add(0, clip)
あなたの回答
tips
プレビュー