2011-05-22 92 views
43

當屏幕關閉時,我的應用程序服務暫停。當屏幕關閉時,如何讓我的Android服務保持運行狀態?

我開始我的服務用下面的代碼:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) { 
    Intent svc = new Intent(this, MyService.class); 
    startService(svc); 
} 

我怎樣才能避免服務暫停?


我在MyService中要做的是從Internet上下載一些數據。如果我有不懂的過程中,我必須遵循的是:

  1. 採集喚醒鎖定
  2. 下載數據
  3. 釋放激活鎖定

在下載數據的方法有以激活鎖定的參考,它是應用程序有wakeLock,這是正確的嗎?

喚醒鎖是默認引用計數。我認爲沒有引用計數是更好的wakeLock,一定要釋放它,我錯了嗎?

回答

64

的部分激活鎖定是你想要的。即使屏幕關閉,它也會使CPU保持打開狀態。

爲了獲得:

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
wakeLock.acquire(); 

要釋放:

wakeLock.release(); 

激活鎖定也支持引用計數,所以你可能在你的服務的多個地方需要喚醒功能,並且該設備可以睡覺的時候沒有他們是積極的。

事情需要提防:

如果您使用引用計數,確保通過您的應用程序的所有控制的路徑將適當收購/釋放... finally塊在這裏派上用場。

此外請務必短時間內不要頻繁地按住WakeLocks。它們在電池使用方面加起來。儘快獲得鎖定,開展業務併發布。

1

我只是使用foregrgound服務。

+0

我已經發布了一個非常乾淨漂亮的解決方案。希望能幫助到你。 http://stackoverflow.com/questions/9029040/how-to-run-an-android-app-in-background/43555050#43555050 – user2288580 2017-04-22 04:02:37

相關問題