アプリが起動するたびに小さなコードを実行したい。私は次のことを試しました:
- Activity.onCreate() で。ただし、たとえばローテーションでアクティビティが再作成される可能性があるため、これは機能しません。
- Application のサブクラスを作成し、そこで onCreate() を実行します。これもうまくいかないようです。アプリがインストールされたときに実行されますが、アプリケーションをバックアウトして再度アクセスしたときは実行されません。
何か案は?
アプリが起動するたびに小さなコードを実行したい。私は次のことを試しました:
何か案は?
true
メイン アクティビティで、起動コードを実行するときに設定する静的ブール値フラグを宣言します。でonCreate
、フラグが の場合にのみ起動コードを実行しますfalse
。(または、さらにonDestroy
言えば、シャットダウン ライフサイクル メソッドのいずれかで)、アクティビティが終了している場合はフラグをクリアします。
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
startedFlag = false;
}
}
これにより、アクティビティが終了するとフラグがクリアされますが、構成の変更によりアクティビティが破棄されている場合はそのままになります。
まだ問題があります。アプリがバックグラウンドで一時停止しているときに、アクティビティのプロセスが強制終了される可能性があります。その場合、フラグはfalse
、ユーザーがアプリをフォアグラウンドに戻そうとしたときに、システムによってアクティビティが再作成されたときに発生します。これが問題になる場合は、フラグを永続化する必要があります。そのために共有設定を使用することをお勧めします。
これは、アプリケーションの起動ごとに一度だけ何かを実行するにはどうすればよいですか?の複製です。
- Application のサブクラスを作成し、そこで onCreate() を実行します。これもうまくいかないようです。アプリのインストール時に実行されますが、アプリケーションをバックアウトして再度アクセスすると実行されません
onCreate() メソッドではなく、コンストラクターにコードを配置する必要があります。この回答を確認してください: https://stackoverflow.com/a/13809300/2005891