2012-10-08 189 views
7

我正在開發應用程序,每5秒鐘檢查一次電話的狀態。 我做到了即:線程和電池消耗

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

這是壞的電池? 如何以其他方式做到這一點?幾秒鐘後服務停止工作。

回答

5

要回答你的問題,這取決於你在while循環內做什麼。

如果你沒有使用和喚醒任何「昂貴」的組件(如互聯網,藍牙,其他傳感器和屏幕),你應該沒問題。本質上,這是操作系統如何在後臺工作,使用線程是最便宜的方法之一。另外,如果你的任務是CPU密集型的,你也會耗盡電池。

如果你做得對,你的服務應該可以正常工作。

另一種方法是使用處理程序,它將爲您抽象大部分線程管理。

+0

謝謝你的回答。我檢查是否有一些未讀短信最終給用戶提醒。 這是最好的方法嗎?有沒有可能讓android殺死我的線程? –

+1

有關接收短信的信息,請參閱http://stackoverflow.com/questions/1973071/broadcastreceiver-sms-received。您應該可以使用接收器。 – Edison

2

Thread.sleep()使當前線程掛起,這意味着CPU將可用於其他線程或將簡單地關閉。還請注意睡眠力量的上下文切換,但您處於安全狀態,睡眠時間間隔很長。所以,一般來說,一切都取決於你。

例如,您可以使用PowerTutor來確保您的應用程序的設計和實施得當。