2

アプリのアップグレード中に、アプリケーションに1回限りのModを作成したいと思います。android.app.Applicationのドキュメントを確認すると、( android.database.sqlite.SQLiteOpenHelperのように)存在しonCreateないことに気づきました。onUpgrade

onCreateメソッドにアップグレードコードを入れましたが、アップグレード中にコードが実行されているかどうかがわかりません。

onCreatedアップグレード中に呼び出されますか?または、アップグレード固有のコードを実行する別の方法はありますか?

4

5 に答える 5

4

アップグレード中にonCreatedが呼び出されますか?

番号。Application.onCreate()アプリケーションが「実行されていない」から「実行中」と見なされる状態からオンになったときに呼び出されます

パッケージに1つ以上のアクティブなプロセスがある場合、アプリケーションは実行中と見なされます。実行中のアプリケーションリストに表示され(すべてのファームウェアで表示できるわけではありませんが、実行中のパッケージを表示するアプリケーションがたくさんあり、このリストを取得するためのAPIがあります)、実行中のサービスやアクティビティが含まれている可能性がありますが、必ずしもそうとは限りません。システムは、アプリケーションが必要であると判断する限り、アプリケーションを「実行中」の状態に保つことができ、メモリを再利用する必要がある場合、または何らかの方法で明示的に強制終了した場合は、アプリケーションを強制終了します(APIもありますが、通常それを使用する理由はありません)。

アップグレード固有のコードを実行する別の方法はありますか?

@Class Stackerが書いたように:新しいバージョンを実現するときにバージョン名または番号を変更する場合-Activity.onCreate()メソッドを介してバージョン名を作成するときにメインアクティビティを確認し、sharedPreferenceに保存した最後のバージョン名と比較できますまたはデータベーステーブル。次に、バージョンが変更されたことを認識したときに、必要なロジックを実装できます。

次のコードでバージョン名とバージョン番号を確認できます。

     PackageInfo pinfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
     Integer versionCode = pinfo.versionCode; 
     String versionName = pinfo.versionName; 

それがあなたを助けてくれたことを願っています、そして幸運を祈ります。

于 2013-01-15T12:42:32.317 に答える
1

Androidがパッケージ操作時に送信するブロードキャストがあります。ただし、問題のパッケージはそれらの受信から除外されているか、配信が信頼できません(現時点で正確な状況を思い出せません)。したがって、信頼できるものは何もありません。

アップグレードの変更が必要な場合は、共有設定ファイルを使用して、インストールを識別し、Application#onCreate()でそれにアクセスできます。アプリの最後のバージョンでもファイルが使用されていた場合、ユーザーがすべてのアプリデータを削除しない限り、ファイルは引き続き存在します。

したがって、アップグレードが実際に何であるかが常に明らかであるとは限らないため、これはすべて少しユースケース固有です。

アップグレード情報のみが含まれるユースケース固有の共有設定ファイルを作成できることに注意してください。

名前にだまされてはいけません。ファイルは、必要に応じてアプリ専用になります(誰かがデバイスをルート化した場合を除きます。この場合、すべての賭けは無効になります)。

于 2013-01-15T08:22:53.500 に答える
0

正確に何を更新しようとしているのかはわかりませんが、現在のビルド番号を、SharedPreferencesの例ごとに保存したものと照合することができます。

詳細については、こちらをご覧ください。Androidのシステムバージョンを確認するにはどうすればよいですか?

于 2013-01-15T08:10:57.770 に答える
0

「ACTION_MY_PACKAGE_REPLACED」ブロードキャストがあります: https ://developer.android.com/reference/android/content/Intent#ACTION_MY_PACKAGE_REPLACED アプリのアップグレードイベントを追跡するために使用できます。サービスの再起動など、更新直後に何かを実行したい場合に便利です。

ただし、コードをすぐに実行する必要がない場合は、アプリの起動時にバージョン番号が変更されているかどうかを確認することをお勧めします。以前のバージョン番号をどこかに保存して比較するだけです。

于 2018-10-07T21:21:42.827 に答える
-2

更新中または更新直後に実行されるコールバックはありません。

于 2013-01-15T08:10:46.367 に答える