1

N 秒ごとにテキスト ファイルに値を書き込むスレッドを使用して、単純なアクティビティを作成しようとしています。

問題は、Activity を実行した数分後、電話機をスタンバイ状態にして、スレッドが長時間、場合によっては数分間停止することです。

Run() では、N 秒間スリープするよりもファイルを書き込む必要があります。

public void run() {
    isrunning = true;
int cont=0;
    try {
        while (isrunning)
        {
            es.writeSD("- THREAD:" + cont, true);
            Thread.sleep(1000);
            es.writeSD("- THREAD - sending: " + cont,true);             
            cont++;
        }
    } 
    catch (InterruptedException e) {
        es.writeSD("- THREAD - InterruptedException: " + e.getMessage(),true);
    }
    catch (Exception e) {
        es.scriviSD("- THREAD - Exception: " + e.getMessage(),true);
    }   
}

これはタイムスタンプ付きのログです

20130911T154448 : - スレッド:36

20130911T154449 : - スレッド送信: 36

20130911T154449 : - スレッド:37

20130911T154652 : - スレッド送信: 37

20130911T154652 : - スレッド:38

20130911T154656 : - スレッド送信: 38

4

1 に答える 1

3

デバイスを強制的に起動したままにする必要があります。ただし、これはバッテリーの消耗が非常に早いので注意してください。

PowerManagerWakeLock必要です: https://developer.android.com/reference/android/os/PowerManager.WakeLock.html

スレッドを開始するとき、acquire()終了WakeLockするrelease()とき。

public void run() {
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
    wl.acquire();
    isrunning = true;
    int cont=0;
    try {
        while (isrunning) {
            es.writeSD("- THREAD:" + cont, true);
            Thread.sleep(1000);
            es.writeSD("- THREAD - sending: " + cont,true);             
            cont++;
        }
    } catch (InterruptedException e) {
        es.writeSD("- THREAD - InterruptedException: " + e.getMessage(),true);
    } catch (Exception e) {
        es.scriviSD("- THREAD - Exception: " + e.getMessage(),true);
    } finally {
        wl.release();
    }
}
于 2013-09-11T14:36:11.000 に答える