16

Stackoverflowのに関する質問と回答を確認した後、少し混乱しましたWakefulIntentService。私の理解が正しいことを確認するために、このトピックに関する知識を得たいと思います。間違っている場合は、遠慮なく訂正してください。

私は小さなアプリケーションを作成しました。このアプリケーションではService、ユーザーが携帯電話を振るたびに音楽を再生し続ける背景を使用しています。デバイスがロックされ、画面がオフになり、期待どおりに機能した後にテストしました。

  1. このフォーラムから聞いていることですが、デバイスがスリープ状態になるとすぐにサービスがオフになる可能性があります。本当?私の場合、それは常に機能します、私は何かが欠けていますか?

  2. 何が必要ですWakeFulIntentServiceか?いつ使用する必要がありますWakefulIntentServiceか?

  3. でタイマーを実行してみましたServiceが、デバイスがロックされ、画面がオフになっていて、タイマーがほぼ実行されていることは確かです。以前はタイマーが切れるたびに通知を受け取っていたからです。

4

2 に答える 2

19

このフォーラムから聞いていることですが、デバイスがスリープ状態になるとすぐにサービスがオフになる可能性があります。本当?

はい。

私の場合、それは常に機能します

次に、デバイス上の他の何かが、デバイスがスリープ状態になるのを防ぎます。おそらくadb shell dumpsys power、何WakeLocksが優れているかを確認するために使用します。

WakeFulIntentサービスの必要性は何ですか?いつWakefulIntentServiceを使用する必要がありますか?

ユーザーが非アクティブで、何もデバイスをスリープ状態にしない場合、デバイスはスリープ状態になる可能性があります。AWakeLockは、デバイスがスリープ状態を維持するために使用されます。トランザクションタイプの作業(ファイルのダウンロードなど)の場合、とWakefulIntentServiceを組み合わせて、デバイスを必要なだけ(そして必要なだけ)スリープ状態に保つのを比較的簡単にします。IntentServiceWakeLock

WakefulIntentService音楽プレーヤーなど、無期限に実行する必要のあるサービスでの使用には適していません。それらのために、あなた自身を管理してくださいWakeLock

于 2013-01-02T19:53:42.223 に答える
11

以下のコードをアプリで使用しました。

サービスがスティッキーであることを確認してください。

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    //this service will run until we stop it

    return START_STICKY;
}

私はあなたの電話が常に起きていることを望みますuは以下のこのコードを使うことができます:

private WakeLock wl;

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "whatever");
    wl.acquire();

マニフェストの権限を忘れないでください。

<uses-permission android:name="android.permission.WAKE_LOCK" />
于 2013-01-02T19:59:43.800 に答える