編輯:高級開發
之前我們曾向您介紹過android的UI設計與後台線程交互,據android API的介紹,service一般是在後台運行的,沒有界面的。那麼如何實現service動態更新UI界面呢?
案例:通過service向遠程服務器發送請求,根據服務器返回的結果動態更新主程序UI界面,主程序可實時關閉或重啟服務。
在主程序activity中注冊一個BroadcastReceiver,用於接收Service發布的廣播。
- @Override
- protected void onStart() {//重寫onStart方法
- dataReceiver = new DataReceiver();
- IntentFilter filter = new IntentFilter();//創建IntentFilter對象
- filter.addAction("com.justel.serviceBC");
- registerReceiver(dataReceiver, filter);//注冊Broadcast Receiver
- super.onStart();
- }
主程序activity可發布廣播,用於向後台service傳遞數據或控制信息,如停止service命令。
- btnStop.setOnClickListener(new OnClickListener() {//為按鈕添加點擊事件監聽
- @Override
- public void onClick(VIEw v) {//重寫onClick方法
- Intent myIntent = new Intent();//創建Intent對象
- myIntent.setAction("com.justel.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.justel.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.justel.service");
- intent.putExtra("data", data);
- sendBroadcast(intent);//發送廣播
至此,我們實現了主程序通過接收廣播實時更新應用的UI界面。
SurfaceVIEw在android中用作游戲開發是最適宜的,本文就將演示游戲開發中常用的兩種繪圖刷新策略在SurfaceVIEw中的實現方法。 首先我們來看一下本
android應用程序是用Java語言寫的,通過aapt工具把應用程序所需要的任何數據、資源文件打包成apk文件,這個文件是一個將應用安裝到手機上的一個載體。有很多方式
android 是Google開發的基於Linux平台的開源手機操作系統,每一個android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下
我們已經介紹了android用戶界面設計模板Dashboard,其實在Dashboard上Andriod用戶界面設計所制作的最初版本為OmniGraffle模板,現在已