7

私は、5秒ごとに電話のステータスの一部をチェックするアプリに取り組んでいます。私はそれをしました:

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

これはバッテリーに悪いですか?どうすれば他の方法でそれを行うことができますか? 数秒後にサービスが停止します。

4

2 に答える 2

7

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

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

また、タスクが CPU を集中的に使用する場合は、バッテリーも消耗します。

正しく実行すれば、サービスは正常に機能するはずです。

別の方法は、スレッド管理の多くを抽象化するハンドラーを使用することです。

于 2012-10-08T21:17:50.253 に答える
3

Thread.sleep() は、現在のスレッドを一時停止します。つまり、CPU は他のスレッドで使用できるか、単にオフになります。また、スリープはコンテキストの切り替えを強制することに注意してください。ただし、大きなスリープ間隔で安全側にいます。したがって、一般的に言えば、すべてはあなた次第です。

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

于 2012-10-08T21:47:35.823 に答える