7

我正在开发每 5 秒检查一次手机状态的应用程序。我这样做了:

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

这对电池有害吗?我怎么能以另一种方式做到这一点?几秒钟后服务停止工作。

4

2 回答 2

7

要回答您的问题,这取决于您在 while 循环中执行的操作。

如果您不使用和唤醒任何“昂贵”的组件(例如互联网、蓝牙、其他传感器和屏幕),您应该没问题。本质上,这就是操作系统在后台运行的方式,使用线程是最便宜的方式之一。

此外,如果您的任务是 CPU 密集型的,您也会耗尽电池电量。

如果你做得对,你的服务应该可以正常工作。

另一种方法是使用处理程序,它将为您抽象出大部分线程管理。

于 2012-10-08T21:17:50.253 回答
3

Thread.sleep() 使当前线程暂停,这意味着 CPU 将可用于其他线程或将直接关闭。还请注意睡眠强制上下文切换,但你在安全方面有很大的睡眠间隔。所以,一般来说,一切都取决于你。

例如,您可以使用PowerTutor来确保您的应用程序得到正确设计和实施。

于 2012-10-08T21:47:35.823 回答