android service交互,Android Activity与Service的交互方式
參考:?http://blog.csdn.net/gebitan505/article/details/18151203
實現更新下載進度的功能
1. 通過廣播交互
Server端將目前的下載進度,通過廣播的方式發送出來,Client端注冊此廣播的監聽器,當獲取到該廣播后,將廣播中當前的下載進度解析出來并更新到界面上。
優缺點分析:
通過廣播的方式實現Activity與Service的交互操作簡單且容易實現,可以勝任簡單級的應用。但缺點也十分明顯,發送廣播受到系統制約。系統會優先發送系統級廣播,在某些特定的情況下,我們自定義的廣播可能會延遲。同時在廣播接收器中不能處理長耗時操作,否則系統會出現ANR即應用程序無響應
2. 共享文件交互
這里提到的共享文件指的是Activity和Service使用同一個文件來達到傳遞數據的目的。我們使用SharedPreferences來實現共享,當然也可以使用其它IO方法實現,通過這種方式實現交互時需要注意,對于文件的讀寫的時候,同一時間只能一方讀一方寫,不能兩方同時寫
優缺點分析:
對於這種方式實現Activity與Service的交互,可以說很方便,就像使用管道,一個往裡寫,一個往外讀。但這種方式也有缺陷,寫入數據較為復雜以及數據量較大時,就有可能導致寫入與讀數據出不一致的錯誤。同時因為經過了一個中轉站,這種操作將更耗時。
3. Messenger交互(信使交互) Handler
Messenger翻譯過來指的是信使,它引用了一個Handler對象,別人能夠向它發送消息(使用mMessenger.send(Message msg)方法)。該類允許跨進程間基于Message通信,在服務端使用Handler創建一個 Messenger,客戶端只要獲得這個服務端的Messenger對象就可以與服務端通信了。也就是說我們可以把Messenger當做Client端與Server端的傳話筒,這樣就可以溝通交流了
優缺點分析:
通過Messenger來實現Activity和Service的交互,稍微深入一點我們就可以知道,其實Messenger也是通過AIDL來實現的。對於前兩種實現方式,Messenger方式總體上來講也是比較容易理解的,這就和平時使用Handler和Thread通信一個道理。
4. Server中自定義接口交互
自定義一個接口,該接口中有一個獲取當前下載進度的空方法。Server端用一個類繼承自Binder并實現該接口,覆寫了其中獲取當前下載進度的方法。Client端通過ServiceConnection獲取到該類的對象,從而能夠使用該獲取當前下載進度的方法,最終實現實時交互。
public interface ICountService {
public int getCurrentLoad();
}
public class DownLoadService extends Service implements ICountService{
private ServiceBinder serviceBinder = new ServiceBinder();
public class ServiceBinder extends Binder implements ICountService{
@Override
public int getCurrentLoad() {
Log.i(TAG, "ServiceBinder getCurrentLoad()... i=:"+i);
return i;
}
}
@Override
public int getCurrentLoad() {
return 0;
}
}
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "DownLoadService.onBind()...");
return serviceBinder;
}
Client端的Timer在bindService()完成之后1秒再開始獲取下載進度,獲取方法是直接通過int curLoad = iCountService.getCurrentLoad();這里的getCurrentLoad()方法是DownLoadService內部類ServiceBinder中的方法。Client端將獲取到的下載進度更新到介面上并更新進度條。
優缺點分析:
這種方法簡單實用,擴展性強,但其也有一些缺點,比如需要延遲一些再開始獲取Server端的數據,從而無法完全實現從零開始同步更新。綜其所述,通過自定義接口實現Activity與Service交互的方法還是比較實用的。適用於同進程中通信,不能進行跨進程通信。
5. AIDL交互
原理:?AIDL屬于Android的IPC機制,常用于跨進程通信,主要實現原理基于底層Binder機制。
優缺點分析:
AIDL在Android中是進程間通信常用的方式,可能使用較為復雜,但效率高,擴展性好。同時很多系統服務就是以這種方式完成與應用程序通信的。
Android Activity、Service、BroadcastReceiver 的生命周期
Activity.Service.BroadcastReceiver這三個組建是Android開發中最常使用到的組件,在它們的生命周期的各個階段我們需要針對性的做些事情,了解這些組件的生命周期有利于我 ...
Android——Activity and Service
參考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html ??http://www.cnblogs.com/feisky/ar ...
Android activity和service的生命周期對比
1Activity生命周期 七個方法 1. void onCreate(Bundle savedInstanceState) 當Activity被第首次加載時執行.我們新啟動一個程序的時候其主窗體的o ...
android Activity綁定Service
activity可以綁定Service,并且可以調用Service中定義的方法 Service代碼:在里面多了一個IBinder;個人理解是用來與Activity綁定的主要通道: public cla ...
Android開機啟動Activity或者Service方法
本文出自 “Bill_Hoo專欄” 博客,請務必保留此出處http://billhoo.blog.51cto.com/2337751/761230 這段時間在做Android的基礎開發,現在有一需求是 ...
Android Activity/Service/Broadcaster三大組件之間互相調用
我們研究兩個問題,1.Service如何通過Broadcaster更改activity的一個TextView.(研究這個問題,考慮到Service從服務器端獲得消息之后,將msg返回給activity ...
Android中Activity、Service和線程之間的通信
Activity.Service和線程應該是Android編程中最常見的幾種類了,幾乎大多數應用程序都會涉及到這幾個類的編程,自然而然的,也就會涉及到三者之間的相互通信,本文就試圖簡單地介紹一下這三者 ...
Android 跨應用調用Activity及Service
如何調用另外一個app應用的activity或者service,本文提供一個驗證可行的方法. 調用方法: Intent intent=new Intent("youActionName&qu ...
Android開機啟動Activity或者Service方法(轉載)
這段時間在做Android的基礎開發,現在有一需求是開機啟動,按照網上某些博文教程做了下,始終不成功,一開機總是提示所啟動的應用程序意外終止,于是參考了Android SDK doc,終于解決問題,下 ...
隨機推薦
ORACLE ";ORA--22992:無法使用遠程表選擇的LOB定位器,database link";
解決辦法:??? 先創建一個臨時表,然后把遠程的含CLOB字段的表導入到臨時表中,再倒入本表. create global temporary table demo_temp as select * ...
spring4+hibernate4+maven環境搭建
本文主要介紹利用maven搭建spring4+hibernate4開發環境. 首先我們創建一個maven項目,具體步驟就不詳細介紹了,看看我們pom.xml文件
java集合-集合大家族
在編寫 Java 程序中,我們最常用的除了八種基本數據類型,String 對象外還有一個集合類,在我們的的程序中到處充斥著集合類的身影!Java 中集合大家族的成員實在是太豐富了,有常用的 Array ...
淺談 Linux 內核無線子系統
淺談 Linux 內核無線子系統 本文目錄 1. 全局概覽 2. 模塊間接口 3. 數據路徑與管理路徑 4. 數據包是如何被發送? 5. 談談管理路徑 6. 數據包又是如何被接收? 7. 總結一下 L ...
context:component-scan掃描使用的use-default-filters
如下方式可以成功掃描到@Controller注解的Bean,不會掃描@Service/@Repository的Bean.
學習Berkeley DB- 入門
1 導言 首先,我們要了解Berkeley DB的一些基本特性,在IBM的開發網站上有篇文章對其有比較清晰的介紹: 這篇文章講到了BDB的設計思想和核心數據結構.以及數據訪問算法:并有常用函數使用范例 ...
windows提權操作以及系統開機關機重啟代碼(用到了LookupPrivilegeValue和AdjustTokenPrivileges調整進程的Token權限)
對于UAC提權操作,一般在編譯期間,如果程序有需求要提權,會在編譯器里設置,vs2010比較簡單,在工程屬性里可以直接設置,vs2005稍微有點兒麻煩,參考這篇文章: http://www.seany ...
用Iconv應對NodeJs對稱加密技術在漢字編碼與NoSQL的一些坑洞
·起因 漢字編碼技術在實際應用中總是會存在這樣或者那樣的問題,尤其是在一些熱門NoSQL方面多少會遇到挑戰.比方說Cassandra字符集還不直接支持GB2312,要想存儲寫漢字那可真是麻煩.當然這還 ...
Extjs--12種布局方式
按照Extjs的4.1的文檔來看,extjs的布局方式大致有12種,下面一一介紹,有些代碼就是文檔中的. 1.Border 邊界布局 border布局,最多可以將頁面分割為"東南西北中&qu ...
vue.js2.0:如何搭建開發環境及構建項目
1,安裝node.js Node.js官網:https://nodejs.org/en/ 進入Node.js官網,選擇下載并安裝Node.js.安裝過程只需要點擊“下一步”即可, 如下圖,非常簡單. ...
總結
以上是生活随笔為你收集整理的android service交互,Android Activity与Service的交互方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php小米官网,小米商城的首页
- 下一篇: android app逆向分析,如何开始