2013-07-01 1 views
1

Я строю Android-сервер SMS.Android-сервер SMS и WakeLock?

Требуется сервер (каждые х секунд) для отправки новых SMS-сообщений (в бесконечном цикле). Устройство Android всегда будет подключаться через USB к серверу.

Извлечение новых сообщений выполняется как служба, и мне нужно, чтобы он работал 24/7. Так как отбор батареи не является проблемой, как следует использовать WakeLock?

Как я читал некоторые статьи о частичном замке, кажется, этого достаточно.

Но все же я не нашел никаких подсказок, когда я должен позвонить wakeLock.acquire(); и wakeLock.release();

Я не думаю, что она могла бы работать так:

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

Учитывая идею ... Все входы будут значительно apperciated. Например, имеет смысл планировать ежедневный перезапуск телефона, чтобы он не застрял? и т.д ...

ответ

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 Это хороший пример того, что вы можете сделать, и они также используют wakelock для своих задач.

+0

Не могли бы вы поделиться кодом с использованием Handler? –

+0

Вы предлагаете приобрести замок onStart службы и не выпускать его? Что происходит с батареей, если нить спала? –

+0

Ну, процессор будет на полную мощность, но он должен работать. Есть многократные решения, я обновляю свой ответ. – NitroG42

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(); 
     } 
    } 
+0

Как я могу назвать этот метод, если устройство спит? –

+0

Значит, это вызов метода? – Sri