前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Android: Intent.ACTION_MY_PACKAGE_REPLACEDを過信するべからず

課題

Room採用のためRealmDBからSQLiteにDBを移行するにあたり、BroadcastReceiverIntent.ACTION_MY_PACKAGE_REPLACED イベントを受取って、そのタイミングでデータ移行プログラムを実行させるようにしたところ、一部の端末でデータが消えたとの報告があった。

対応

Realmマイグレーション時にエラーが発生しているケースを除くと、データ移行のプログラム自体が発動していない可能性がある。そこで BroadcastReceiverのイベント受信からApplicationクラスのonCreateに処理を移動し、そこからWorkManagerOneTimeWorkRequestを作成してenqueueUniqueWorkで重複実行されないようにしたところ、無事データ移行が行われた。

まとめ

Play Storeでアプリが更新されたとしても、(端末によっては?)必ずしもIntent.ACTION_MY_PACKAGE_REPLACEDが発動するとは限らない。
重要度の高い処理はそのタイミングのみに頼らず確実に実行される場所に書くこと。