1

我构建了一个基于 Android 的 SMS 服务器。

它应请求服务器(每 x 秒)发送新的 SMS(在无限循环中)。Android 设备将始终通过 USB 插入服务器。

新消息的获取作为服务运行,我需要它运行 24/7。由于电池耗尽在这里不是问题,我应该如何使用 WakeLock?

当我阅读一些关于部分锁定的文章时,它似乎就足够了。

但是我没有找到任何线索,我什么时候应该调用 wakeLock.acquire(); 和wakeLock.release();

我不认为它可以这样工作:

while(true){
    wakeLock.acquire();
    //Do stuff
    wakeLock.release();
    Thread.sleep(10000);
}

考虑到这个想法......任何投入都会得到极大的重视。例如,安排每天重启手机是否有意义,这样它就不会卡住?ETC...

4

2 回答 2

1

正如这里所解释的,可以使用各种类型的锁。如果你想永远在线,那么你可以在循环之外获取它:

boolean end = false;
wakeLock.acquire();
while(!end){

    //Do stuff

    Thread.sleep(10000);
}
wakeLock.release();

但是你不应该真正使用循环,而是尝试使用处理程序来执行重复任务:http: //developer.android.com/reference/android/os/Handler.html

例子 :

    private class MyRunnable implements Runnable {

    @Override
    public void run() {
        // Do stuff
        handler.postDelayed(new MyRunnable(), 100000);

    }

}   

Handler handler = new android.os.Handler();
handler.postDelayed(new MyRunnable(), 1000000);

如果您需要经常在短时间内执行重复任务,则该处理程序很有用。如果时间较长(比如几个小时),请使用AlarmManager : Alarm Manager Example 这是一个很好的例子,说明你可以做什么,他们也使用唤醒锁来完成他们的任务。

于 2013-07-01T11:25:06.440 回答
0

使用以下方式唤醒设备

private void wakeUpTheDevice()
{

    pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    wL = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "wakeupdevice");   
    if ((wL != null) &&         // we have a WakeLock
            (wL.isHeld() == false) ){  // but we don't hold it 
        wL.acquire();
        }
  }
于 2013-07-01T11:24:27.060 回答