2011-02-19 19 views
1

wakelocksに問題があります。基本的に、私は私のタイマースレッド、私のアプリケーションの全体の期間AsyncTaskのdoInBackground(それはパフォーマンス測定を行うためのバックグラウンドアプリ)で実行中のウォークロックを持っていた。それから、10分ごとに画面を数秒間目覚めさせたいだけと決めました。そこでAsyncTaskを拡張した別のクラスを作成し、以下のコードをdoInBackgroundに配置しましたが、画面は再びオンになりません。私は、このスレッドと、onCreateのdoInBackgroundメソッドを持つAsyncTaskである2つの他のスレッドを開始することに注意してください。Android - Wakelockスレッドで画面が表示されない

ここで私の新しい内部クラスが起きています。基本的には、他の2つのバックグラウンドスレッドが真偽値を設定するまで、10分ごとに電話画面を起動します。

private class WakeUp extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); 

     do{ 
      try { 
       Thread.sleep(WAKEUP_EVERY); //600000ms 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      }   

      wl.acquire(); 

      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      wl.release(); 

     }while(!timeCompleted || !transferCompleted); 

     return null; 
    } 

} 
+0

あなたはスレッドが殺されていませんか?このサービスまたはAlarmServiceを使用して10分ごとにパルスを作成することができます。 AsyncTaskはあなたのアプリのスレッドプールで実行されるので、スレッドプールはおそらくスレッド実行時にタイムアウトします。 –

+0

@Greg私は、ウェークロックを取得した直後にログステートメントを追加し、トレークがまだ生きているかどうかを確認する前にログステートメントを追加しました。ステートメントはadbに表示されますが、画面の電源がオンにならないため、スレッドが稼動しているように見えますが、waklockが期待通りに機能していないように見えます。私はService/AlarmServiceを調べ、試してみるべきものがあるかどうかを見ます。 – Michael

+0

OH、このフラグACQUIRE_CAUSES_WAKEUPを追加しましたか?画面をオンにするには、そのフラグを追加する必要があると思います.PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP –

答えて

2

あなたはACQUIRE_CAUSES_WAKEUPフラグを使用して、画面をオンにするウェイクロックを伝えるために忘れてしまいました。ドキュメントごとに:

通常のウェイクロックは実際に照明をオンにしません。その代わりに、照明をオンにした後に(例えば、ユーザ活動から)点灯させる。このフラグは、WakeLockが取得されたときに、画面またはキーボードを強制的にオンにします。典型的な使用は、ユーザが直ちに見ることが重要な通知のためである。

詳細はACQUIRE_CAUSES_WAKEUPを参照してください:D

関連する問題