2012-10-08 13 views
7

私は5秒ごとに電話の状態のいくつかをチェックするアプリを開発中です。 私はそれをしました:スレッドとバッテリーの消費

Thread checking = new Thread() { 
    public void run(){ 
     while(<<some status>>) { 
      <<checkstatus and do something>> 
      Thread.sleep(5000); 
     } 
    } 
} 

これはバッテリーに悪いですか? どうすればいいですか?数秒後にサービスが停止します。

答えて

5

質問に答えるには、whileループ内で何をしているかによって異なります。

"高価な"コンポーネント(インターネット、ブルートゥース、他のセンサー、画面など)を使用しておらず、目を覚ましていない場合は、問題ありません。本質的には、これは、OSがバックグラウンドでどのように動作し、スレッドを使用するのが最も安価な方法の1つです。

また、タスクがCPUを大量に使用している場合は、バッテリーも消耗します。

あなたのサービスは正常に機能するはずです。

もう1つの方法は、スレッド管理の多くを抽象化するHandlersを使用することです。

+0

ありがとうございました。私は、未読のSMSがあるかどうかを確認して、その旨をユーザに通知する。 これはこれを行う最善の方法ですか?アンドロイドが私のスレッドを殺す可能性はありますか? –

+1

SMSの受信については、http://stackoverflow.com/questions/1973071/broadcastreceiver-sms-receivedを参照してください。おそらく、代わりに受信機を使用するべきです。 – Edison

2

Thread.sleep()は、現在のスレッドを中断させます。これは、CPUが他のスレッドに使用可能になるか、単に消えてしまうことを意味します。また、スリープ強制的なコンテキストスイッチに注意してください。しかし、あなたは大きなスリープインターバルで安全な側にいます。だから、一般的に言えば、すべてはあなた次第です。

たとえば、PowerTutorを使用して、アプリケーションが適切に設計され、実装されていることを確認できます。

関連する問題