9

私はアンドロイドがウェイクロックを使用してCPUを実行したり画面をオンにしたりしていることを知っています。画面のウェイク ロックにより、ユーザーが一定時間操作を行わなかった後、ユーザー アクティブ タイマーが画面をオフにできないことは明らかです。

しかし、CPUウェイクロックがいつ有効になるのか疑問に思っています。

1.新しいスレッドを作成し、wake lock なしでバックグラウンドで CPU を使い続けた場合、画面をオフにしても停止しません。止まるか、いつ止まるか。

2.Timer.schedule() でスケジュールされたスレッドはどうですか?

3. socket.read() でブロックされているサービスで長いソケット接続を保持している場合、別の質問につながります。ソケットがリモートからデータを受信したときにサービスがウェイクアップされるようにするには、ウェイクロックを取得する必要がありますか?

ありがとう。

4

2 に答える 2

8

すべてのサブ質問への回答

  1. ウェイクロックがアクティブでない場合、Android はスリープ状態になります。どのプロセスやスレッドが実行されているかは問題ではなく、スリープ状態になります。つまり、スレッドまたはその他のプロセスがウェイクロックをアクティブ化していない場合、スレッドは実行されないため、バッテリーが消耗しません。スレッドは、他のプロセスがウェイクロックを取得した場合にのみアクティブになります。

  2. 同じことが Timer.schedule() にも当てはまります。毎秒実行するがウェイクロックなしで実行する Timer を作成し、android が 10 秒間スリープ状態になるとします。11 秒目に p を起動すると、タイマーが 10 回期限切れになったことを識別し、9 つのインスタンスを単に破棄して 1 回だけ実行します。非常に信頼性の高いタイマーが必要な場合は、ウェイク ロックまたはユーザー AlarmTimer を取得する必要があります。

  3. はい。

于 2012-02-17T16:37:21.097 に答える
0

Wake-Lockに関連するさまざまな機能から私が学んだことは、Android システムがスリープ状態になることはなく、スリープ状態になると SMS を受信できず、つまり Android がスリープ状態になると OS レベルのタスクのみを実行しません。
ウェイクロックは、アプリケーションがシステムにデバイスの電源を入れたままにするように要求できるメカニズムです。ユーザーがそのアプリケーションを起動するために移動していなくても、アプリケーションはバックグラウンドで操作を実行できます。

1 と 2 については、Akshar が正しく説明しています。3. システムがスリープ状態 (OS レベルのタスクのみが実行中) のときにアプリケーションで操作を実行するには、まずシステムからウェイクロックを要求する必要があり、その後、アプリケーションのみがその操作を実行できます。操作が完了したら、ウェイクロックを解放して、システムが OS レベルのタスクの管理に移行できるようにする必要があります。

于 2014-12-31T09:26:27.353 に答える