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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何讓Android服務(wù)與活動(dòng)進(jìn)行通信

如何讓Android服務(wù)與活動(dòng)進(jìn)行通信

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

3 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

有三種明顯的與服務(wù)通信的方式:

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

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

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

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

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

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

注意:只有當(dāng)應(yīng)用程序/活動(dòng)/任務(wù)是訪問(wèn)服務(wù)的唯一進(jìn)程時(shí),此方法才會(huì)有用。如果不是這種情況,您必須使用選項(xiàng)1或2。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 912 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)