Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> 在Android中實現service動態更新UI界面

在Android中實現service動態更新UI界面

編輯:高級開發

之前我們曾向您介紹過android的UI設計與後台線程交互,據android API的介紹,service一般是在後台運行的,沒有界面的。那麼如何實現service動態更新UI界面呢?

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

注冊BroadcastReceiver

在主程序activity中注冊一個BroadcastReceiver,用於接收Service發布的廣播。

  1. @Override
  2. protected void onStart() {//重寫onStart方法
  3. dataReceiver = new DataReceiver();
  4. IntentFilter filter = new IntentFilter();//創建IntentFilter對象
  5. filter.addAction("com.justel.serviceBC");
  6. registerReceiver(dataReceiver, filter);//注冊Broadcast Receiver
  7. super.onStart();
  8. }

停止service命令

主程序activity可發布廣播,用於向後台service傳遞數據或控制信息,如停止service命令。

  1. btnStop.setOnClickListener(new OnClickListener() {//為按鈕添加點擊事件監聽
  2. @Override
  3. public void onClick(VIEw v) {//重寫onClick方法
  4. Intent myIntent = new Intent();//創建Intent對象
  5. myIntent.setAction("com.justel.service");
  6. myIntent.putExtra("cmd", CMD_STOP_SERVICE);
  7. sendBroadcast(myIntent);//發送廣播
  8. }
  9. });

接收廣播

後台service注冊BroadCastReceiver用於接受主程序發送的廣播

  1. @Override
  2. public int onStartCommand(Intent intent, int flags, int startId) {//重寫onStartCommand方法
  3. IntentFilter filter = new IntentFilter();//創建IntentFilter對象
  4. filter.addAction("com.justel.service");
  5. registerReceiver(cmdReceiver, filter);//注冊Broadcast Receiver
  6. doJob();//調用方法啟動線程,自己來完成
  7. return super.onStartCommand(intent, flags, startId);
  8. }

實時發送

後台service在doJob()方法中連接服務器並向主程序實時發送廣播。

  1. /**
  2. * 啟動一個子純種並連接服務器,接收服務器返回數據data。代碼略。。。
  3. */
  4. Object data;//服務器返回的數據data
  5. Intent intent = new Intent();//創建Intent對象
  6. intent.setAction("com.justel.service");
  7. intent.putExtra("data", data);
  8. sendBroadcast(intent);//發送廣播

至此,我們實現了主程序通過接收廣播實時更新應用的UI界面。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved