基于Android的短信服务器和WakeLock?

时间:2013-07-01 11:16:39

标签: android wakelock

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

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

获取新消息作为服务运行,我需要它全天候运行。 由于电池耗尽不是问题,我应该如何使用WakeLock?

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

但是当我调用wakeLock.acquire()时,我没有找到任何线索;和wakeLock.release();

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

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

考虑到这个想法......任何输入都会有很大的影响。例如,调度程序每天重新启动手机是否有意义,以免它被卡住?等...

2 个答案:

答案 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);

如果您需要经常执行重复任务并且周期较短,则处理程序非常有用。如果期限较长(如几小时),请使用AlarmManagerAlarm 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();
        }
  }