1

アクティビティのバックグラウンドでカウントダウン タイマーを実行しようとしています。終了するまで常に実行する必要がありますが、サービスで動作させる方法がわかりません。メインアクティビティの表示も更新する必要があります

4

1 に答える 1

1

ええと、すべてのサービスが100%実行されるわけではありません。100%で実行されていない限り、バッテリーの消耗はありません。Androidデバイスの実際のバッテリー消費量を見ると、最大の割合が画面からのものであることがわかります。次はラジオから来ます。プロセスの実行にかかる費用はごくわずかです。

IntentServiceを使用して、定期的にアラームを発生させることができます。サービスはそれ自体にインテントを送信できます。サービスを開始するための1つのインテントアクションと、アラームをオフにするための1つのインテントアクションがあります。アラームをリセットするための3番目のアクションを実行します。

サービスを開始するには、startService(intent)を使用して「start」インテントをIntentServiceに送信します。これにより、アクション「cycle」を使用してインテントを作成し、そのインテントをPendingIntentに配置し、AlarmManager.setRepeating()を使用して繰り返しアラームをスケジュールするメソッドをトリガーする必要があります。

アラームに設定した間隔の後、AlarmManagerはPendingIntentから「cycle」インテントを取り出してサービスに送り返します。サービスは、PendingIntentを再構築し、アラームを再開することによって「サイクル」を処理する必要があります。これは無期限に続きます。「サイクル」アクションの処理では、アラームが鳴ったときに実行したいことを他に何でも入れることができます。

アラームを停止したい場合は、「停止」インテントを送信してください。それに応じて、サービスは、PendingIntentを再構築してから、AlarmManager.cancel()を呼び出すことにより、アラームをキャンセルする必要があります。

注:IntentServiceのメインのエントリポイントはonHandleIntent()です。あなたはそこから他のすべてを呼び出します。そのメソッドが終了すると、サービスは別のインテントを受け取るまで非アクティブになります。それを「見る」ことができる唯一の場所は、キャッシュされたプロセスです。アラームを停止すると、システムは最終的にサービスが使用されていないことを認識し、ガベージコレクションを行います。

サービスは、バックグラウンド作業を行う方法です。AsyncTaskまたはスレッドを実行できると思いますが、それでもサービスで実行したい場合は、フォアグラウンドで実行されているものにリンクしています。タスクがユーザーと対話する必要がない場合、特にタスクがアクティビティと非同期で動作できる場合は、サービスを使用します。

于 2012-03-30T03:03:38.967 に答える