Android Service 通知Activity更新介面的方法研究
Android的最重要的元件式service和activity,那麼在使用的過程中,我們最常遇到的問題是他們之間的通訊問題。當然今天我們不研究底層的實現問題,我從上層的應用的如何使用的角度進行研究。
首先Activity呼叫Service
這個是比較基礎的,它有兩種常見的方法;
第一, 通過Intent,這個比較簡單了,可以指定package name和class name的方式來呼叫,Intent.setClassName這個成員即可。通過putString來裝載資料,startService(intent)即可例子如下:
Intent regIntent = new Intent(“com.service”);
regIntent.putExtra(“data”, "helloData");
startService(regIntent);
第二, 通過IPC,這個比較麻煩,一般用不著,這裡不談
但是,反過來,Service如何將一些狀態告訴Activity呢?方法有兩種
第一、 service 通過廣播的形式傳送broadcast,我們寫一個broadcastReceiver即可,通常的情況,將broadcastReceiver寫成Activity的內部類,這個onReceiver可以直接呼叫activity的方法來更新介面。但是內部類只能採用程式碼註冊的方法registerReceiver(),不能再AndroidManifest.xml檔案中進行靜態的宣告,因為內部類要依賴於外部類而存在的。如果你一定要用AndroidManifest來註冊receiver,那麼只能把broadcastReceiver寫成單獨的檔案的public類。這時候,你想更新介面就比較麻煩了,你只能自己把你要更新的activity執行起來,然後再向這個activity的內部類發廣播的訊息來更新介面
第二、 service直接向activity發intent。在service裡面進行startActivity是屬於在Activity外startActivity即在task外啟動activity,因此,必須在intent加入一個引數如下:Intent intentSend = new Intent(Constants.ACTION_STATUS);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra(“statues“,“end“);
context.startActivity(intent1);
但是此時會引發的一個問題是,多次startActivity會導致很多的activity實現被執行,這肯定不是我們要的,我只要一個Activity就可,此時,我們要在androidManifest裡面對這個activity的launchMode設定為singleInstance
<activity android:name="com.demo.Activity"
android:label="@string/online" android:launchMode="singleInstance">
記住啦,有人設定為singleTask,也可以,但他們有一點區別。
同時記住要更新intent,這樣getInstent才可以得到每次的新例項
@Override
protected void onNewIntent (Intent intent){
setIntent(intent);
}
說得有點亂,不明白的請留言。Thanks for your time.
轉載自http://www.cnblogs.com/chenyingzhong/archive/2011/03/07/1973234.html
相關文章
- Android Service生命週期 Service裡面的onStartCommand()方法詳解Android
- Android Service最全面的解析Android
- Android 活動(activity)和服務(service)進行通訊Android
- Android service裡面啟動activity和alertdialogAndroid
- android 中Service 和activity之間的資料傳遞的幾種方法Android
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- android中activity全屏的方法Android
- [Android]Fragment、Activity比較——Android碎片介紹AndroidFragment
- Android外掛化研究代ACTIVITY註冊Android
- Android Activity/Service/Broadcaster三大元件之間互相呼叫AndroidAST元件
- Android activity相互跳轉後臺出現兩個頁面的坑Android
- Android ActivityAndroid
- Application,Activity,Service的建立流程(1)APP
- Application,Activity,Service的建立流程(2)APP
- Android的Activity啟動與子執行緒更新UIAndroid執行緒UI
- 關於 Android Service 的介紹都在這了Android
- Android原始碼解析Activity#setContentView()方法Android原始碼View
- Activity 的 Task 以及 launchMode 研究
- Android之ActivityAndroid
- Android通知之狀態列通知Android
- java8介面的靜態方法和預設方法Java
- android Activity細節(一) onSaveInstanceState()方法使用注意點Android
- Android ServiceAndroid
- Activity與Service是否處於同一程式?
- Service實時向Activity傳遞資料案例
- Activity與Service通訊的方式有三種:
- Android Service 服務(一)—— ServiceAndroid
- Notification使用詳解之三:通過服務更新進度通知&在Activity中監聽服務進度
- Android:UI更新方法五:利用AsyncTask更新UIAndroidUI
- Android通知之普通對話方塊通知Android
- Android通知之列表對話方塊通知Android
- Android通知之多選對話方塊通知Android
- Android 通知之 NotificationAndroid
- android之Notification通知Android
- Activity和Service跨程式通訊的兩種方式
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- Android Service SecurityAndroid
- Android Intent ServiceAndroidIntent