2012-12-27 32 views
1

電池節能策略,我看這個偉大的博客文章Android Architecture Tutorial: Developing an App with a Background Service (using IPC)對於長時間運行的工控機服務

筆者顯示在一個單獨的進程固定時間間隔內運行的鳴叫檢索服務。

該服務將繼續運行無限。我意識到要停止該過程,要去管理應用程序並明確停止服務是唯一的方法。

請注意,這不是一個非常電池友好的方式。即使是作者自稱。

是的,有黑暗的一面Android的後臺服務太 - 太 許多服務在後臺做太多東西會減慢 電話,吸電池。然而,這並不是我想在這篇文章中提到的 ,所以也許我們會在另一篇文章中回到資源 管理禮節。

但是,作者不再更新他的博客。

我嘗試通過TweetViewActivity停止服務。

@Override 
protected void onDestroy() { 
    super.onDestroy();    

    try { 
     api.removeListener(collectorListener); 
     unbindService(serviceConnection); 
    } catch (Throwable t) { 
     // catch any issues, typical for destroy routines 
     // even if we failed to destroy something, we need to continue destroying 
     Log.w(TAG, "Failed to unbind from the service", t); 
    } 

    // New code added by Cheok. Not working. Not sure why. 
    this.stopService(intent); 

    Log.i(TAG, "Activity destroyed"); 
} 

但這並不起作用。我可以看到服務仍在運行。我是否知道,一旦我退出Activity,停止IPC服務的正確方法是什麼?上述例子的節電策略是什麼?

+0

也許我應該將onDestroy中的所有代碼移動到onStop,如從文章中放置onCreate中的服務創建代碼。 –

+0

那麼,不能保證你的onDestroy/onStop會被調用。系統決策在這裏起着重要作用。我相信你的服務還在運行,因爲系統還沒有真正決定調用你的onDestroy/onStop方法。你可以嘗試onPause()方法。它會工作。 – PH7

回答

1

它仍在運行的原因是因爲系統從未調用過onDestroy。

如果您選中此鏈接:http://developer.android.com/reference/android/app/Activity.html您可以從圖中看到,只有在系統將要從內存中清除應用程序時才調用onDestroy,根據內存約束,它可能根本不會被調用。

保證被調用的唯一回調是onPause(),這是您應該依靠停止服務的唯一回調。