3

AlarmManagers が無期限に (またはシステムの再起動まで、またはタスク キラーが現実的に消去するまで) 存続し、ガベージ コレクションを回避するように宣言および初期化する必要がある適切なコンテキストは何ですか?アプリケーション全体の範囲。

私が AlarmManager を使用している理由は、常にサービスを実行する必要性を改善するためです。しかし、この偉業を達成するために、AlarmManager はどこで作成されるのでしょうか? アラームオブジェクトが最終的にはそれとともに消えてしまい、アラームの発火が停止するため、オフ/破棄されるサービスでは作成できないと思います-そうではありませんか?

アラームの onReceive の BroadcastReceiver の拡張として MyAlarm クラスが作成され、AlarmManager がこのクラスのコンストラクターで初期化される、別の質問投稿からの AlarmManager の例のアイデアが気に入りました。しかし、複数のコンテキストで MyAlarm インスタンスが必要な場合、この実装はどのように機能しますか。複数の Activity オブジェクトにまたがるイベント ハンドラーからなど。複数のウィジェットのイベント ハンドラーから。ワーカー サービス内から。これらはすべて、アラームを無効または有効にする必要がある場合があります。私の推測では、アラームを処理する必要があるすべての場所にローカル インスタンスを作成します。pendingIntent はすべてのインスタンスで同じであるため、事実上、仮想「シングルトン」で作業することになります。

発生する可能性のあるアラーム マネージャの「ガベージ コレクション」をテストする方法がわからないため、これは現時点では概念的なものにすぎません。数時間後、アラームがランダムに鳴らなくなったとき。私の目標は、電話が再起動されず、タスクがユーザーによって手動で強制終了されない場合、アラームを無期限に発火させ続けることです。ありがとう

4

2 に答える 2

0

しかし、この偉業を達成するために、AlarmManager はどこで作成されるのでしょうか?

AlarmManagerシステムサービスです。オペレーティングシステムによって「作成」されます。

アラームオブジェクトが最終的にはそれとともに消えてしまい、アラームの発火が停止するため、オフ/破棄されるサービスでは作成できないと思います-そうではありませんか?

AlarmManagerシステムサービスです。「アラーム」は、オペレーティング システムによって保持されます。

私の推測では、アラームを処理する必要があるすべての場所にローカル インスタンスを作成します。pendingIntent はすべてのインスタンスで同じであるため、事実上、仮想「シングルトン」で作業することになります。

正しい。

于 2012-04-26T17:59:06.380 に答える
0

android では、OS は使用されていないと思われるサービスを自動的に閉じます...多くのアプリ、特にウィジェットはこれに苦労しています。サービスが閉じないようにする決定的な方法があるかどうかはわかりません。システムが無駄なタスクだと思わないように、時々何かを実行させることで、より長く持続させることができます。

はい、それらすべてに同じ保留中のインテントを使用するため、複数のハンドラーがリンクされた 1 つのサービスを実行するだけで済みます。これは、OS のセットアップ方法の利点の 1 つです。単一のサービスの開始時に署名を使用してすべてのウィジェットを更新できます。そのサービスは、ウィジェットからすべてのハンドラーを受け取ることもできます。

于 2012-04-26T17:36:20.197 に答える