9

場合によっては大きなファイルをダウンロードするダウンロード スレッドを生成するサービスがあります。電話がスリープ状態になるとすぐに、ダウンロード スレッドが大幅に遅くなり、停止することに気付きました。

明白な救済策、ウェイクロック。したがって、CPUがダウンロードを処理し続けるためだけに、partial_wake_lockを取得しても問題ないと思います。ただし、それは機能しません。同じ動作で、ダウンロードが遅くなり、画面がオフになると停止します。

次に、screen_dim_wake_lock を試しました。今回は、画面が点灯したまま (淡色表示) になり、ダウンロードが完了するまでフルスピードで実行され、ウェイクロックが解除され、電話がスリープ状態になりました。

私の質問は、partial_wake_lock を保持しているときに、screen_dim_wake_lock 中と同じようにスレッドを実行し続けることができないのはなぜですか? これら2つの違いについて、文書化されていない動作はありますか? おそらくUIスレッドで実行していないからですか?

編集:

Wi-Fiロックを追加しました。Wi-Fi はスリープ状態になりませんが、私のスレッドはまだ死んでいます。他のプロセスがシステムをウェイクアップすると、ダウンロードは通常の速度で続行され、その後再び遅くなります。電話を起動すると、通常の速度で続行し、画面が消えると再び速度が低下します. スレッドがシステムによってバックグラウンドにプッシュされているようです。それを防げるかどうかだと思います。

4

2 に答える 2

1

大量の URL セットを継続的にダウンロードする 1 つのサービスで、私はあなたと同じ問題を抱えていました。最善の方法は、こちらで説明されているように、screen_dim_wake_lock を使用して、サービスをフォアグラウンドに移動することでした。

このように、画面は常にオンになっているため、WI-FI インターフェイスでも同じことが起こります。逆に、電話をしばらく非アクティブのままにしておくと、画面がオフになり、電話がスリープ モードになり、15 分後に WIFI もオフになります。

したがって、別の方法は、partial_wake_lock (CPU のみがオン) を使用し、WIFI が常にオンになるように携帯電話の設定を変更することです (おそらく、これは取得した WIFI_LOCK のように思えます..):

  • ホーム画面からシステムまたは設定に移動し、次に
  • ワイヤレスとネットワークを選択
  • WI-FI設定を選択
  • [メニュー] を押して、[詳細設定] を選択します
  • Wi-Fiスリープポリシーを押して、なしに変更します

そうすれば、画面がオフのスリープモードでもサービスが機能します。ここでの唯一の問題は次のとおりです。

WIFI 接続がしばらく失われると、Android がサービスを停止する可能性があります。これは、非アクティブになるためです..

于 2011-06-20T14:18:05.897 に答える
0

Wifi ロックと部分ロックを見てみましょう。

http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html

于 2012-06-11T11:25:03.097 に答える