2011-03-22 50 views
9

我有一個Android服務重新啓動的問題。我正在構建API版本7並且在Android 2.3.3的設備上運行。沒有調用onStartCommand()後重新啓動崩潰的服務在Android 2.3

問題是,當我的服務被系統殺死並且稍後重新啓動時,只有我的服務的onCreate()被調用。代碼onStartCommand()未被執行。如果我第一次啓動我的應用程序,onStartCommand()中的代碼通常會執行並且一切正常,直到系統終止我的服務,則服務將無法正確重啓。

Documentation says that onStartCommand() is always called when a service is restarted.在服務重啓的情況下,onStartCommand()應該被調用爲null意圖。這不是我的情況。

任何想法爲什麼會發生這種情況?

回答

11

您可能會看到薑餅中的錯誤。在android-developers組中有一個關於它的帖子:onStartCommand bug thread

查看Dianne Hackborn的帖子編號26瞭解詳情。

+1

謝謝onStartCommand()被稱爲與服務重新啓動後,空意圖。所以我必須複製onCreate和onCommandStart中的初始化代碼,因爲它是一個小部件... – shelll 2011-03-22 21:39:36

+0

難道這仍然是4.2.2中的一個錯誤嗎? – powder366 2013-07-15 14:08:27

+0

根據問題跟蹤器(https://code.google.com/p/android/issues/detail?id=12117&can=1&q=onstartcommand&colspec=ID%20Type%20Status%20Owner%20Summary),它應該在4.2.2中修復%20Stars) – 2013-07-15 16:12:27

2

這是的Android 2.3(API級別9)中的錯誤,其中得到了固定在API級別10.

從戴安Hackborns post regarding this issue

好的,這的確在3.3斷裂。 [原文如此!]去年8月的變化是 。這是一個打破了它的變化:
https://android.googlesource.com/platform/frameworks/base/+/5474b0f8603ee66413c3e44600ca46f162f3089e

注意,git的承諾鏈接以前沒有工作。 Click here for a working mirror link to the commit and line that is causing the bug.

她的意思是2.3,但寫了3.3。 She later corrected it and provided a suggestion for a workaround:

對不起,我的意思是2.3。

自從GB代碼發佈以來,這已經出現在代碼庫中,因此會有誰知道它附帶哪些設備。

問題是沒有被重新啓動該服務,只是 他們onStartCommand()不叫與當時空。 onCreate()方法仍然被調用。作爲解決方法,您可能只需在onCreate()中發佈消息並在 onStartCommand()中設置標誌;如果你在 時間內沒有收到onStartCommand()消息,那麼你可能不會得到 的null Intent調用。 (如果你需要做到這一點在所有...一般的東西 像註冊接收器,你真的想這樣做 這的onCreate(),因爲該方法只調用一次。)

also wrote該行爲將在下一次平臺更新中解決(後3。0):

我將在下一個平臺更新(Android 3.0之後)中解決這個問題; 不幸的是,這段代碼已經在源代碼樹中出現了一段時間, 以及現在的幾個版本,所以我們需要忍受這些版本中破壞的 行爲。該服務將仍然有onCreate() 調用,所以你可以在那裏工作。

我以爲她的意思API級別爲10,我可以確認的是,當你從API 9級切換到10

+0

我觀察到,這也可以在API級別10(2.3.6)中重現。但是在API級別14中不可重現。 – Pawan 2014-12-08 10:43:54

相關問題