2013-04-24 173 views
2

我在檢測wifi點的應用程序中有後臺服務。他運行良好,但是當設備進入睡眠模式時,該服務會重新啓動。我配置了Wake Lock和Wifi Lock。1小時後重新啓動服務

我的代碼:(創建服務)

public void onCreate(){ 
    super.onCreate(); 
    Settings.System.putInt(getContentResolver(), 
    Settings.System.WIFI_SLEEP_POLICY, 
    Settings.System.WIFI_SLEEP_POLICY_NEVER); 

    wm = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 
    wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL, "SD1xWifi"); 
    wifiLock.acquire(); 

    mgr = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    wakeLock = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK, "SD1x"); 
    wakeLock.acquire(); 
} 

我的代碼:(啓動服務)

public void onStart(Intent i, int x){ 
    super.onStart(i, x); 
    Log.i("TesteWifi", "Find spots wifi started"); 
    try{ 
     wm.startScan(); 
     timer.scheduleAtFixedRate(new mainTask(), 0, 1000); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     Log.i("TesteWifi", "Error on start service find wifi"); 
    } 
} 

我的代碼:(TimerTask的)

private class mainTask extends TimerTask { 

     @Override 
     public void run() { 
      // ...timertask processes... 
     } 

我的代碼:(服務開始於MainActivity)

try { 
    startService(obj.getServiceAutoCheckin()); 
} catch (Exception e) { 
    Log.i("Services", "ERRO: " + e.getMessage()); 
} 

爲什麼我的服務重新啓動?

+0

你是如何開始這項服務? – minhaz 2013-04-24 16:18:06

+0

你能告訴我你的服務代碼嗎? – 2013-04-24 16:21:30

+0

也許你做這一切都是錯誤的 - 發佈更多的細節(和更好的格式)。對於你應該使用報警管理器,而不是一個長時間運行的服務:http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager。你正在釋放鎖嗎?發佈更多代碼並更好地解釋 – 2013-04-26 21:21:06

回答

1

使用廣播接收機從服務獲得服務意圖。

0

我解決了更改服務啓動事件的問題。我通過onStartCommand更改了事件。服務響應是START_STICKY。

Docs