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

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

編輯:關於Android編程

之前曾介紹過Android的UI設計與後台線程交互,據Android API的介紹,service一般是在後台運行的,沒有界面的。那麼如何實現service動態更新UI界面呢?
案例:通過service向遠程服務器發送請求,根據服務器返回的結果動態更新主程序UI界面,主程序可實時關閉或重啟服務。
注冊BroadcastReceiver
在主程序activity中注冊一個BroadcastReceiver,用於接收Service發布的廣播。

@Override
protected void onStart()
{// 重寫onStart方法
 dataReceiver = new DataReceiver();
 IntentFilter filter = new IntentFilter();// 創建IntentFilter對象
 filter.addAction("com.szy.ui.service");
 registerReceiver(dataReceiver, filter);// 注冊Broadcast Receiver
 super.onStart();
}

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

btnStop.setOnClickListener(new OnClickListener()
{
 //為按鈕添加點擊事件監聽    
    @Override
    public void onClick(View v)
    {//重寫onClick方法 
        Intent myIntent = new Intent();//創建Intent對象 
        myIntent.setAction("com.szy.ui.service"); 
        myIntent.putExtra("cmd", CMD_STOP_SERVICE); 
        sendBroadcast(myIntent);//發送廣播 
    } 
}); 

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

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

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

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

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

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