課題
Room
採用のためRealmDB
からSQLite
にDBを移行するにあたり、BroadcastReceiver
でIntent.ACTION_MY_PACKAGE_REPLACED
イベントを受取って、そのタイミングでデータ移行プログラムを実行させるようにしたところ、一部の端末でデータが消えたとの報告があった。
対応
Realm
のマイグレーション時にエラーが発生しているケースを除くと、データ移行のプログラム自体が発動していない可能性がある。そこで BroadcastReceiver
のイベント受信からApplication
クラスのonCreate
に処理を移動し、そこからWorkManager
のOneTimeWorkRequest
を作成してenqueueUniqueWork
で重複実行されないようにしたところ、無事データ移行が行われた。
まとめ
Play Storeでアプリが更新されたとしても、(端末によっては?)必ずしもIntent.ACTION_MY_PACKAGE_REPLACED
が発動するとは限らない。
重要度の高い処理はそのタイミングのみに頼らず確実に実行される場所に書くこと。