0

サービスを作成して開始するアプリケーションがあります。次に、サービスがスレッドを作成します。スレッドのこの役割は、何らかのタスクを実行して 5 秒間スリープし、その後再びタスクを実行して 5 秒間スリープするということです。

私が直面している問題は、スレッドが 5 秒間スリープする代わりに、最大 2 分間起きないことがあります。私は、Android システムが優先度の高い作業を実行できることを理解しています。これにより、スレッドのウェイクアップに遅延が生じる可能性があります。スレッドが常に 5 秒後にウェイクアップするように改善する方法はありますか。

サービス onCreate() のコード。遅延を計算するために、タイムスタンプ付きの「スレッド実行中」をログ ファイルに記録していることに注意してください。

@Override
public void onCreate() {
    logger.Log("MTrackService::onCreate()");
    thMain = new Thread(new Runnable() {
        public void run() {
            while(running) {
                logger.Log("Thread Running");
                try {
                    //Do Stuff
                    Thread.sleep(5*1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    running = false;
                }
            }
        }
    });
    thMain.start();
}

前もって感謝します。

4

1 に答える 1

0

デバイスがスリープ状態になる可能性があります。その場合、スレッドは 5 秒ごとに実行されません。デバイスが起動するまで、再び実行されることはありません。

これを確認するには、デバイスを起動したままにします (ウェイクロックを使用するか、USB 電源に接続し、アプリケーション -> 開発者設定で「接続されている場合はスリープしない」を設定します。

スレッドを 5 秒ごとに実行する必要がある場合は、ウェイクロックを取得して、デバイスがスリープ状態にならないようにする必要があります。もちろん、これはバッテリーを消耗させ、ユーザーを怒らせます;-)

于 2012-07-19T16:51:47.677 に答える