回答
如果您的Service
處於活動狀態,那麼Application
類別也是活動。
否則,您將無法使用getApplicationContext()
。
雖然我懷疑論者一直運行有一個很乾淨的方法,使Service
具有一定Activity
通信的服務,應該是最後一個是被激活的。
這種乾淨的方式叫做LocalBroadcastManager。
旨在接收數據的Activity
應該在onResume()
中註冊BroadcastReceiver
並在onPause()
中註銷它。
你實例化你的BroadcastReceiver
在活動的onCreate()
this.localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do what you have to do here if you receive data from the Service.
}
}
您創建一個過濾器,以便您的活動只聽某一類型的信號。
private IntentFilter notifIntentFilter new IntentFilter("com.you.yourapp.MY_SIGNAL");
在onResume()
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(this.localBroadcastReceiver, notifIntentFilter);
在onPause()
LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(this.localBroadcastReceiver);
現在,每當你想將數據發送到你的活動,你的服務可以撥打:
final Intent intent = new Intent();
intent.setAction("com.you.yourapp.MY_SIGNAL");
// put your data in intent
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
如果您的Activity
是清醒,它將響應信號。否則,如果它在後臺,或者它沒有實例化,它不會。
您可以將此模式應用於任意數量的活動。
儘管如此,我從來沒有使用這個Application
類中。但是你可以嘗試在那裏註冊你的接收器。它可能有效,因爲如果Application
類被銷燬,BroadcastReceiver
也被銷燬,因此也可能未註冊。
問題是,如果你的應用程序被破壞,你的服務也會被殺死。除非你在另一個過程中啓動它。但是,它將擁有它自己的Application
實例;這是一件複雜的事情,您現在可能不想深入細節......
重要:由於Application
類是不依賴於任何UI組件,你可以做任何你需要直接您的服務中。如果你需要操縱用戶界面,那麼上面描述的模式將適用於你。
請閱讀關於新Android's background limitations。
編輯:
噢權利,如果你需要你的服務來調用你的Application
類中的函數聲明,你可以做
我沒雖然我不明白你的問題,但是上述任何一種方法都適合你。
- 1. 從應用程序類廣播意圖到Android服務的麻煩
- 2. 從服務發送廣播到活動?
- 3. 將廣播從一個應用程序發送到另一個
- 4. 從PreferenceScreen發送廣播意圖?
- 5. 服務未收到廣播意圖
- 6. 從服務到意圖的位圖導致RuntimeException接收到廣播意圖
- 7. Android-將數據從應用程序發送到燈服務器
- 8. 從應用程序發送圖像到網絡服務器
- 9. 從服務器發送圖像到Android應用程序
- 10. 廣播接收器,讓其他人的應用程序和服務發送數據到我的應用程序
- 11. 從廣播接收器發送意圖與附加活動(問題與服務)
- 12. 系統應用程序未收到廣播的意圖
- 13. 發送廣播服務,同時綁定
- 14. 發送SignalR在同一臺服務器上從Windows服務在ASP.NET MVC應用程序中運行的廣播
- 15. 將圖像從iOS應用程序發送到服務器的正確方法
- 16. 將圖像文件數據從C#windows應用程序發送到WCF服務
- 17. 將圖像從drawable發送到另一個應用程序/服務
- 18. 發送廣播意圖只有一個應用程序,而不使用明確的意圖
- 19. 如何使用LocalBroadcastManager將服務意圖從服務發送到活動?
- 20. 意圖服務不從廣播接收器調用時開始
- 21. 將數據從廣播發送到活動。如何發送?
- 22. 將系統廣播發送到僅託管配置文件應用程序
- 23. 從ios應用程序發送對象數據到服務器應用程序
- 24. 處理程序中的廣播意圖
- 25. Hot從儀表測試發送廣播意圖
- 26. iOS應用程序將數據發送到Rest API服務
- 27. 服務器如何將事件發送到應用程序
- 28. 將服務發送到WPF應用程序的好方法
- 29. 當從廣播接收器開始一個活動時,應用程序崩潰,從服務發送
- 30. 從服務器發送命令到android應用程序
爲什麼應用程序類?你可以澄清你的情況 –
@VivekMishra我有一個服務運行XMPP繁重。這項服務永遠在後臺運行。現在,當我想將數據從服務傳輸到應用程序時,用戶可能正在使用該應用程序。所以我想先喚醒應用程序,然後發送意圖和應用程序類將其處理到正確的活動 – Bezaleel
爲什麼應用程序類?那可以在廣播接收機上完成 –