回答
如果您的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. 服務未收到廣播意圖
- 5. 從Ios應用程序發送圖像到web api服務
- 6. 從服務器發送圖像到Android應用程序
- 7. 從應用程序發送圖像到網絡服務器
- 8. 從廣播接收器發送意圖與附加活動(問題與服務)
- 9. 系統應用程序未收到廣播的意圖
- 10. 發送廣播服務,同時綁定
- 11. 將圖像文件數據從C#windows應用程序發送到WCF服務
- 12. 將圖像從iOS應用程序發送到服務器的正確方法
- 13. 將圖像從drawable發送到另一個應用程序/服務
- 14. 將系統廣播發送到僅託管配置文件應用程序
- 15. Hot從儀表測試發送廣播意圖
- 16. 處理程序中的廣播意圖
- 17. 從應用程序發送字符串到服務器
- 18. 從j2me應用程序發送XML數據到服務器
- 19. 從iOS應用程序發送參數到SOAP ASMX服務
- 20. 從Android應用程序發送照片到服務器端
- 21. 從iphone應用程序發送日期時間到web服務
- 22. 發送數據從服務器到Android應用程序
- 23. 從服務器發送命令到android應用程序
- 24. 將數據從.NET應用程序廣播到另一個
- 25. 獲取廣播意圖的應用程序名稱
- 26. 無法啓動應用程序的廣播意圖
- 27. 應用程序關閉時接收意圖廣播
- 28. Android廣播發送應用程序的包名
- 29. Java從服務器發送TCP包廣播
- 30. PHP的WebSocket - 廣播(發送)從服務器
爲什麼應用程序類?你可以澄清你的情況 –
@VivekMishra我有一個服務運行XMPP繁重。這項服務永遠在後臺運行。現在,當我想將數據從服務傳輸到應用程序時,用戶可能正在使用該應用程序。所以我想先喚醒應用程序,然後發送意圖和應用程序類將其處理到正確的活動 – Bezaleel
爲什麼應用程序類?那可以在廣播接收機上完成 –