2012-02-14 85 views
2

我有一個叫做PACKAGE_ADDED的廣播接收器,還有一個叫做BOOT_COMPLETED的廣播接收器。該bootcompleted廣播接收器開始我service.When安裝新的應用程序,我想發信息給我的服務,來到我的腦海。首先解決辦法是用重新開始運行服務?

intent.setAction("NEW_APP_INSTALLED"); 
startService(intent); 

再次啓動該服務不停止服務並檢查service.onStart()方法中的intent.getAction()值。如果結果是NEW_APP_INSTALLED,請致電newAppInstalled()。我不認爲這是一個優雅的解決方案。

重複啓動服務有問題嗎?當我的活動通過ipc(aidl)綁定到它時會發生什麼情況,同時獲取數據並且安裝了新應用的廣播接收器再次啓動它?最後,解決我的問題的最佳方法是什麼?

+0

您有一個啓動服務的BOOT_COMPLETE廣播接收器。您的服務可以偵聽PACKAGE_ADDED。 – ciscogambo 2012-02-14 17:59:58

回答

2

一次又一次地啓動服務的問題?

最後,解決我的問題的最佳方法是什麼?

對於您在已經運行的服務上調用startService是完全正確的。您可以按照您建議的方式進行操作,也可以使用兩種不同的服務(一種用於引導,一種用於new_app),或者您可以在服務啓動後在服務中註冊BroadcastReceiver,但這樣做效果不佳,因爲如果嘗試發送一條消息,它並沒有運行,它不會得到消息..我更喜歡一個服務,如你所建議和使用startService

當我的活動通過ipc(AIDL)獲取數據 並且安裝了新的應用程序的廣播接收器再次啓動它時會發生什麼?

嗯,我真的對AIDL一無所知。 This可能會有所幫助。該頁面顯示「大多數應用程序不應該使用AIDL創建綁定服務」。這是因爲它需要多線程並使其更加複雜。

請讓我知道,如果我沒有回答你的滿意 - 雖然我不能真正詳細說明AIDL,因爲我不知道這件事。

+0

所以你說再次開始一個正在運行的服務是好的。它不是在查殺服務並重新開始吧?這是非常重要的,如果它不是如何起作用,一次又一次地開始服務。第三種方式,你建議在代碼方式上註冊PACKAGE_ADDED的廣播接收器,我的意思不是AndroidManifest可能是我的好解決方案因爲我只想捕捉PACKAGE_ADDED廣播時,我的服務正在運行,所以如果我的服務沒有運行,爲我抓取PACKAGE_ADDED廣播並不重要。任何建議? – dardanel 2012-02-15 09:54:37

+0

如果在服務運行時調用'startService',它只是將新的意圖傳遞給'Service'並調用'onStartCommand'。如果您在正在運行的服務上調用'startService',它不會終止服務。 – Jakar 2012-02-22 03:38:00

+0

並且爲了捕獲'PACKAGE_ADDED',你可以在你的服務的'onCreate'中註冊'registerReceiver(...)'。 I.E.你不需要把它放在清單中。 – Jakar 2012-02-22 03:39:22