Android中service動態更新UI

0x00

據Android API的介紹,service一般是在後臺運行的,沒有界面的。那麼如何實現service動態更新UI界面呢?
例:通過service向遠程服務器發送請求,根據服務器返回的結果動態更新主程序UI界面,主程序可實時關閉或重啓服務。

0x01

註冊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界面。

0xff
參考:http://www.cnblogs.com/zhangs1986/p/3248258.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章