0

フラグメントでカウントダウンタイマーを実行していて、戻るボタンを押すたびにonDestroy()呼び出され、カウントダウンが強制終了されます。アプリを再度起動すると、新しいアクティビティが開始され、カウントダウンがなくなります。

onDestroy() isFinished()を返しますtrue

ホームボタンを押しても、これは起こりません。

どうすればこれが起こらないようにできますか?サービスを利用しますか?フラグを設定しますか?戻るボタンを上書きしますか?私はここで迷子になっています。

4

4 に答える 4

0

戻るボタンが押されると、アクティビティ/プロセスが破棄されます。はい、これを回避するには a を使用します。Serviceこのタイマーを実行し続けることが重要な場合は、 a Foreground Service(required a constant Notification) を使用します。システムメモリが少なく、再利用する必要がある場合Foreground Service、通常は破壊できません。Service私の経験では、これはあまり頻繁には発生しません (特に新しいデバイスでは)。

于 2012-08-09T13:10:51.257 に答える
0

タイマーはアクティビティのコンテキストで実行されているため、アクティビティが破棄されるとタイマーも破棄されます。ホームを押すと、アクティビティが一時停止状態になるため、さまざまなアクションが行われます。

必要に応じて開始できるバックグラウンド サービスに移動し、アクティビティが破棄されてもバックグラウンドで実行し続けます。バックグラウンド サービスがあっても、メモリが必要な場合はデバイスによって強制終了される可能性があるため、それも処理する必要があることに注意してください。

カウントダウン タイマーをデバイスの時間と同期させます。そうすれば、サービスが破棄された場合、デバイスの現在の時刻を使用してカウントダウン時間を再同期できます。

この状況で役立つ AlarmManager も見てください - http://developer.android.com/reference/android/app/AlarmManager.html

于 2012-08-09T13:11:53.607 に答える
0

このアプローチでは、ユーザーが何があってもアプリを離れたいという理由で押し返した場合、通常の Android ライフサイクルを壊しています。
とにかく、onBackPressed をオーバーライドする動作を回避し、Back キーを Home キーのように動作させることができます。ここを見てくださいホームボタンのように振る舞うために戻るボタンをオーバーライドする

于 2012-08-09T13:09:08.690 に答える
0

あなたの活動の破壊はあなたの手に負えません。ガベージコレクタに完全に依存します。メモリをクリーンアップする必要があり、アクティビティがバックグラウンドにある場合は、おそらく破棄されます。

startForeground(...)絶対に必要な場合にのみサービスが破棄されるようにするために、サービスを使用する必要があります。WakeLockまた、画面がロックされている間も維持したい場合は、サービスでを取得することを忘れないでください。

于 2012-08-09T13:12:13.463 に答える