第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓Android服務與活動進行通信

如何讓Android服務與活動進行通信

如何讓Android服務與活動進行通信我正在編寫我的第一個Android應用程序,并試圖在服務和活動之間進行溝通。我有一個服務,將運行在后臺,并做一些GPS和基于時間的日志記錄。我將有一個活動,將用于啟動和停止服務。因此,首先,我需要能夠確定服務在活動啟動時是否正在運行。這里還有一些其他的問題,所以我想我可以弄清楚(但請隨時提供建議)。我真正的問題是:如果活動正在運行,并且服務已經(jīng)啟動,我需要一種讓服務向活動發(fā)送消息的方法。這一點上的簡單字符串和整數(shù)-狀態(tài)消息主要是。消息不會定期發(fā)生,所以我不認為輪詢服務是一個很好的方式,如果有其他方式。我只希望在用戶啟動該活動時進行此通信-我不希望從服務中啟動該活動。換句話說,如果您啟動了該活動,并且服務正在運行,那么當發(fā)生一些有趣的事情時,您將在ActivityUI中看到一些狀態(tài)消息。如果您不啟動該活動,您將不會看到這些消息(它們沒有那么有趣)。似乎我應該能夠確定服務是否正在運行,如果是的話,將活動添加為偵聽器。然后,在活動暫?;蛲V箷r,以偵聽器的身份刪除該活動。這真的有可能嗎?我能找到的唯一方法是讓活動實現(xiàn)Parcelable并構建一個AIDL文件,這樣我就可以通過服務的遠程接口傳遞它。不過,這似乎有點過火了,我不知道該活動應該如何實現(xiàn)writeToPackcel()/readFromPackcel()。有沒有更簡單或更好的方法?謝謝你的幫助。編輯:對于以后對此感興趣的人,有來自Google的示例代碼,用于通過示例目錄/apis/app/RemoteService.java中的AIDL處理這個問題。
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

有三種明顯的與服務通信的方式:

  1. 使用意圖
  2. 使用AIDL
  3. 使用服務對象本身(作為單例)

在您的例子中,我選擇了選項3。對它自己的服務進行靜態(tài)引用,并在onCreate()中填充它:

void onCreate(Intent i) {
  sInstance = this;}

使一個靜態(tài)函數(shù)MyService getInstance(),它返回靜態(tài)sInstance.

然后進去Activity.onCreate()您可以異步地啟動服務,直到服務實際啟動(您可以讓您的服務通過向活動發(fā)送意圖通知您的應用程序它已經(jīng)準備好了)。得到它的例子。當您擁有實例時,將您的服務偵聽器對象注冊到您的服務中,您將被設置。注意:當編輯活動中的視圖時,應該在UI線程中修改視圖,服務可能會運行自己的線程,因此需要調(diào)用Activity.runOnUiThread().

最不需要做的事情是移除對偵聽器對象的引用。Activity.onPause(),否則活動上下文的實例就會泄漏,而不是很好。

注意:只有當應用程序/活動/任務是訪問服務的唯一進程時,此方法才會有用。如果不是這種情況,您必須使用選項1或2。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 906 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號