我构建了一个基于Android的SMS服务器。
它应该请求服务器(每x秒)发送新的SMS(在无限循环中)。 Android设备将始终通过USB插入服务器。
获取新消息作为服务运行,我需要它全天候运行。 由于电池耗尽不是问题,我应该如何使用WakeLock?
当我阅读一些关于部分锁定的文章时,似乎就足够了。
但是当我调用wakeLock.acquire()时,我没有找到任何线索;和wakeLock.release();
我不认为它可以那样工作:
while(true){
wakeLock.acquire();
//Do stuff
wakeLock.release();
Thread.sleep(10000);
}
考虑到这个想法......任何输入都会有很大的影响。例如,调度程序每天重新启动手机是否有意义,以免它被卡住?等...
答案 0 :(得分:1)
如here所述,可以使用各种类型的锁。如果你想永远在线,那么你可以在循环之外获得它:
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 这是你可以做的一个很好的例子,他们也使用唤醒锁来完成他们的任务。
答案 1 :(得分: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();
}
}