1. 程式人生 > >在Android中實現Service動態更新UI介面(Service與主程式Activity之間的資料互動或控制)

在Android中實現Service動態更新UI介面(Service與主程式Activity之間的資料互動或控制)

案例:通過service向遠端伺服器傳送請求,根據伺服器返回的結果動態更新主程式UI介面,主程式可實時關閉或重啟服務。

方案一:使用廣播+Service註冊BroadcastReceiver

1、在主程式activity中註冊一個BroadcastReceiver,用於接收Service釋出的廣播。

  1. @Override
  2. protectedvoid onStart() {//重寫onStart方法  
  3.     dataReceiver = new DataReceiver();    
  4.     IntentFilter filter = new IntentFilter();//建立IntentFilter物件  
  5.     filter.addAction("com.xiaoshan.app");    
  6.     registerReceiver(dataReceiver, filter);//註冊Broadcast Receiver  
  7.     super.onStart();    
  8. }   

2、在Service中註冊一個BroadcastReceiver,用於接收主程式釋出的廣播。

  1. @Override
  2.     publicint onStartCommand(Intent intent, int flags, int startId) {//重寫onStartCommand方法          <pre name="code" class="java">        cmdReceiver = new CmdReceiver();
  3.         IntentFilter filter = new IntentFilter();//建立IntentFilter物件  
  4.         filter.addAction("com.xiaoshan.service");  
  5.         registerReceiver(cmdReceiver, filter);//註冊Broadcast Receiver  
  6.         returnsuper.onStartCommand(intent, flags, startId);    
  7.     } </pre>  
  8. <pre></pre>  
  9. <p></p>  
  10. <pre></pre>  
  11. <p></p>  
  12. <h2><a name="t2"></a>傳送廣播</h2>  
  13. <p>1、主程式釋出廣播,Service接收讀取資料。</p>  
  14. <p>如:主程式activity可釋出廣播,用於向後臺service傳遞資料或控制資訊,如停止service命令。</p>  
  15. <p></p>  
  16. <pre name="code"class="java">    btnStop.setOnClickListener(new OnClickListener() {//為按鈕新增點選事件監聽     
  17.         @Override
  18.         publicvoid onClick(View v) {//重寫onClick方法  
  19.             Intent myIntent = new Intent();//建立Intent物件  
  20.             myIntent.setAction("com.xiaoshan.service");    
  21.             myIntent.putExtra("cmd", CMD_STOP_SERVICE);    
  22.             sendBroadcast(myIntent);//傳送廣播  
  23.         }    
  24.     }); </pre><br>  
  25. 2、Service釋出廣播,主程式Activity接收更新UI。  
  26. <p></p>  
  27. <p>如:Service後臺讀取網路資料,用於向Activity傳遞資料或控制介面資訊,更新UI。</p>  
  28. <p></p>  
  29. <pre name="code"class="java">//連線伺服器讀取資料(略)
  30. Object data;//伺服器返回的資料data
  31. Intent intent = new Intent();//建立Intent物件  
  32. intent.setAction("com.xiaoshan.app");    
  33. intent.putExtra("data", data);    
  34. sendBroadcast(intent);//傳送廣播 </pre>
  35. <p></p>  
  36. <p><br>  
  37. </p>  
  38. <p>如上實現雙向廣播註冊和接收來實現Service和主程式Activity之間的資料互動或控制。<br>  
  39. <br>  
  40. </p>  
  41. <p></p>  
  42. <h2><a name="t3"></a><span style="font-size:32px">
  1. 方案二:使用Handler</span><br>  
  2. </h2>  
  3. 1、在主程式的Activity中宣告一個static變數handler,裡面寫好回撥函式  
  4. <p></p>  
  5. <p></p><pre name="code"class="java">   TextView tv = ……;//這裡省略
  6.         publicstatic Handler handler = new Handler(new Callback() {  
  7.         @Override
  8.         publicboolean handleMessage(Message msg) {  
  9.             tv.setText(msg.getData().getString("content"));  
  10.             returnfalse;  
  11.         }  
  12.     });</pre>2、在Service裡面,呼叫這個handler,傳輸資料。<p></p>  
  13. <p></p><pre name="code"class="java">       Message msg = MyActivity.handler.obtainMessage();  
  14.         Bundle data = new Bundle();  
  15.         data.putString("content",content);  
  16.         msg.setData(data);  
  17.         msg.sendToTarget();</pre><br>  
  18. <br>  
  19. <p></p>  
  20. <p><br>  
  21. </p>  
  22. <p><br>  
  23. </p>  
  24. <br>  
  25. <br>  
  26. <pre></pre>  

相關推薦

Android實現Service動態更新UI介面Service主程式Activity之間資料互動控制

案例:通過service向遠端伺服器傳送請求,根據伺服器返回的結果動態更新主程式UI介面,主程式可實時關閉或重啟服務。 方案一:使用廣播+Service註冊BroadcastReceiver 1、在主程式activity中註冊一個BroadcastReceiver

Android使用AsyncTask非同步更新UI介面

概述: AsyncTask是在Android SDK 1.5之後推出的一個方便編寫後臺執行緒與UI執行緒互動的輔助類。AsyncTask的內部實現是一個執行緒池,所有提交的非同步任務都會在這個執行緒池中的工作執行緒內執行,當工作執行緒需要跟UI執行緒互動時,工作執行緒

Service 動態更新 UI

binder null manager edate nds pda update ive 發送廣播 http://blog.csdn.net/u013724061/article/details/38642049 最終效果: 動態顯示當前時間和電量 思路: 首先在A

Android總結Handler非同步更新UI介面轉載

轉載地址:https://blog.csdn.net/qq_21004057/article/details/51582412 本篇文章通過三種方式來實現UI控制元件的更新,Handler非同步更新UI在安卓開發中最常用也非常實在。這篇文章注重實現思路,所以我就不在介面方面進行美化了,都是最原始

使用AsyncTask非同步更新UI介面載入網路圖片

寫這個部落格時抽抽了,順便又用了一些WebView的東西,更多webview參見這裡 1.簡單介紹下AsyncTask AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以

啟動 nohup storm和 在瀏覽器輸入ip:8080/index.html進入storm UI介面注意埠不一定是8080,注意配置

在啟動storm之前要確保nimbus和supervisor上的Zookeeper已經啟動 (1)檢視zk的狀態:./zkServer.sh status 12(2)如果zk沒有開啟,將nimbus和supervisor的zk開啟./zkServer.sh start1(3)

Android探索之旅第十四篇Android實現炫酷效果的Demo持續收錄......

浪起來!使用 drawBitmapMesh 實現模擬水波紋效果 簡書傳送門 三十秒實現QQ首頁動畫特效 BMoveView為RadioGroup新增移動的特

Android 仿Win8的metro的UI介面

轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/23441455昨晚沒事手機下載了一些APP,發現現在仿win8的主介面越來越多,在大家見慣了類GridView或者類Tab後,給人一種耳目一新的感覺。今天在e

Android 幾種更新UI介面的方法

android 更新UI的幾種方法 根據之前的專案經驗,以及在網上看到的一些技術文章,將UI更新的幾種方法在此做個總結:(補充一點,不要混淆了Runnable和Thread,Runnable只是個單純的任務,只是啟動這個任務需要執行緒來驅動,而這個執行緒可以是

Android線上程裡更新UI介面

在Android裡,不允許線上程裡更新UI介面,那麼當我們要更新UI介面的時候,我們要用到Handler 例子: 這裡我們在按鈕裡開啟了一個執行緒,用來動態更新文字框裡的值,然後我們執行來看一下 (報錯: Only the original thread that

Android非同步處理二:使用AsyncTask非同步更新UI介面

在《Android非同步處理一:使用Thread+Handler實現非UI執行緒更新UI介面》中,我們使用Thread+Handler的方式實現了非同步更新UI介面,這一篇中,我們介紹一種更為簡潔的實現方式:使用AsyncTask非同步更新UI介面。 概述:

Android初級開發----用Handle機制更新UI介面

引入: 之前對Android講義的一個小專案——–隨指尖移動的小球進行修改,利用View中的invalidate()方法實現每次觸碰螢幕更新(UI執行緒)小球的位置並且附加判斷大小,實現觸碰更新小球大小隨之更改顏色. API引入: 每次執行inva

Android非同步處理一:使用AsyncTask非同步更新UI介面

概述: AsyncTask是在Android SDK 1.5之後推出的一個方便編寫後臺執行緒與UI執行緒互動的輔助類。AsyncTask的內部實現是一個執行緒池,每個後臺任務會提交到執行緒池中的執行緒執行,然後使用Thread+Handler的方式呼叫回撥函式(如需深入瞭

Android非同步處理二:AsynTask介紹和使用AsyncTask非同步更新UI介面

(1)AsyncTask的介紹 通過上圖中的AsyncTask的原始碼結構圖可以看到,主要用於過載的方法是doInBackground(),onPreExecute()、onPostExecute()、onProgressUpdate()、onCanc

Android通過AIDL實現跨程序更新UI

一、概述 本篇文章將和大家一起來學習AIDL實現跨程序更新UI。 需求是:在同一個應用中有兩個Activity,MainActivity和TempActivity,這兩個Activity不在同一個程序中。 現在需要通過TempActivity來改變Ma

Android實現簡易的登入介面

Mainactivity佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res

Android實現Wifi列表的更新即wifi的連線使用

1.Manifest.xm配置WiFi許可權 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permissio

Android實現陰影效果

sta 技術 wid 語言 mat floating 大表 ado sch 在Android L推出後,Google提出了全新的設計語言:材質設計。其中很重要的一點就是陰影效果的使用,你可以為每一個View設置一個elevation值,相當於除了x、y之外的z值,z值決定

android實現毛筆效果(View 畫圖)

方法 繪畫 object android中 validate 滑動 一個 lineto 效果 近期有一個項目設計一個APP實現通過觸摸屏實現毛筆寫字效果。傳統的繪畫板程序直接通過Path的moveTo和LineTo便可實現簡單的線條繪畫程序。然而要達到毛筆的筆鋒效果

Android 實現隊列方式處理優先級信息

div fragment als eth lean @override 需要 一個 原理 需求:當界面在處理消息A時,突然接收到消息B,需要立馬顯示B的信息,然後再繼續顯示消息A,或者接收到消息C,再顯示完消息A後再顯示消息C; 原理很簡單 在一個輪詢中,查詢消息列表中的元