3

アプリが5分間バックグラウンドに移行したときにタイムアウト機能を作成する必要があります(アクティビティが終了している場合を除き、onPause()を起動するもの)。ユーザーがアプリケーションに戻った場合は、タイマーをキャンセルする必要があります。

また、タイマーが電話で設定された時間に依存しないようにする必要があります。つまり、アプリがバックグラウンドに移行し、ユーザーが5分以内にアプリケーションがタイムアウトする時間を変更します。

AlarmManagerのドキュメントを確認すると、次のように記載されています。

Note: The Alarm Manager is intended for cases where you want to have your application code       
run at a specific time, even if your application is not currently running. For normal 
timing operations (ticks, timeouts, etc) it is easier and much more efficient to use 
Handler.
4

4 に答える 4

0

AlarmManagerを確認する必要があります。あなたは、 PendingIntentを使って特定の時間または5分ごとに実行するようにアプリを簡単にプログラムすることができます。同じPendingIntentでキャンセルできます。

時間依存性についてはわかりませんが、テストは簡単です。

于 2012-11-05T11:25:10.143 に答える
0

または、バウンドサービスの設定を試すこともできます。これらは、ユーザーが最前面のアプリケーションを切り替えた場合でも、バックグラウンドで動作できます。スレッドの場合と同じように、Handlerを使用してサービスと通信できます。

最も簡単なのは、事前定義されたタイプのsendEmptyMessageDelayedを使用し、アプリがトップに戻ったら、callを使用してremoveMessages()を使用することです。

于 2012-11-05T11:30:48.143 に答える
0

次のように、onPause()を使用してアラームを設定します。AlarmManager

AlarmManager alarmManager = getSystemService(Context.ALARM_SERVICE);
// Alarm time is elapsed time since boot (including sleep) plus 5 minutes
long alarmTime = SystemClock.elapsedRealtime() + 5 * 60 * 1000;
alarmManager.set(AlarmManager.ELAPSED_REALTIME, alarmTime, pendingIntent);

ブロードキャストインテントを使用するpendingIntent()ことも、アクティビティの1つを開始させることもできます。アラームが鳴ったときに何をしたいかによります。

注:を使用AlarmManager.ELAPSED_REALTIMEすると、ユーザーが日付/時刻の設定に加えた変更が5分間のタイムアウトに影響を与えないことが保証されます。

onResume()アプリが再開したとき(in )と終了したとき(in onDestroy())に必ずアラームをキャンセルしてください

于 2012-11-05T11:34:14.193 に答える
0

最も簡単な解決策は、アクティビティが一時停止したときにsharedPreferencesに値を設定し、Resumeでこの値を再度テストすることではないかと思います。ユーザーが時計を変更することによって値が破損するのを防ぐために、SystemClock.elapsedRealtime()またはSystemClock.uptimeMillis()を使用できます。

于 2012-11-05T11:35:50.763 に答える