0

如何在特定流程中運行的服務與我的Android應用的其餘部分之間共享對象?Android:在特定流程和活動中的服務之間共享對象

在我的清單中,我將process="com.test.myprocess"設置爲服務聲明。

當我的用戶在應用程序中登錄時,我初始化了一個「會話」對象。然後我開始一個Android服務,並使用Android Annotation注入會話對象。但是當我在我的服務中從注入的會話中執行session.getUuid()時,我總是得到「null」。

如果我在對應於我的應用程序(例如在UiThread中)的過程中做同樣的事情,則該值不爲空。

感謝

+0

是的,當用戶從最近的Android應用程序中掃掉應用程序時,我不希望該Android殺死服務 – psv

+0

,因爲這會創建一個[使用Messenger綁定服務](https://developer.android.com/ guide/components/bound-services.html#Messenger):)讓我知道如果你有任何問題 –

+0

我正在使用Android Annotation,我不知道是否有一種簡單的方法來綁定一個服務與這個框架? – psv

回答

0

對於來自Service發送對象到Activity我會建議使用的功能:

public void sendBroadcast(Intent intent); 

創建相應的Intent,把你的變量或額外的對象。你的對象必須實現Serialisable接口。如果它無法將其序列化爲JSON並傳遞一個字符串。就像這樣:

Intent intent = new Intent(); 
intent.setAction("UNIQUE_BROADCAST_ID"); 
intent.putExtra("EXTRA_ID", ...); 
this.sendBroadcast(intent); 

在你Activity註冊BroadcastReceiver具有特定代碼:

registerReceiver(receiver, new IntentFilter("UNIQUE_BROADCAST_ID")); 
+0

是的...這可能會工作,但我可能會手動綁定服務作爲Android文檔的建議。這只是奇怪的是沒有簡單的方法來做到這一點與Android註釋 – psv

0

你綁定的服務?你可以學習一些關於AIDL的知識。一個類對象只屬於一個進程,所以當你使用Annotation在另一個進程中獲取會話對象時,結果爲空。

+0

你確定一個類對象只屬於一個進程,即使我的應用程序創建兩個進程?如果是這樣,這意味着如果我設置process="com.test.myprocess",我必須使用AIDL架構?在Android Annotation中使用AIDL似乎有點困難,我必須使用「stock」android API ......這意味着沒有注入依賴關係 – psv

+0

是的,一個進程在dalvik虛擬機上運行。對於java文件,dvm中只有一個calss對象。正如其他人所說你可以使用廣播接收器。 – whis

相關問題