在Android中,异步更新UI,通常我们会选用Handler启动线程,或者sendMessage的方式,那么利用Service和广播也可以更新UI的,例子如下:我们建立一个Service:

package com.andyimport android.app.Service;//引入相关包import android.content.BroadcastReceiver;//引入相关包import android.content.Context;//引入相关包import android.content.Intent;//引入相关包import android.content.IntentFilter;//引入相关包import android.os.IBinder;//引入相关包//继承自Service的子类public class MyService extends Service{       CommandReceiver cmdReceiver;       boolean flag;       @Override       public void onCreate(){//重写onCreate方法              flag = true;              cmdReceiver = newCommandReceiver();             super.onCreate();       }       @Override       public IBinder onBind(Intent intent){//重写onBind方法              // TODO Auto-generated methodstub              return null;       }       @Override       public int onStartCommand(Intent intent, intflags, int startId) {//重写onStartCommand方法              IntentFilter filter = newIntentFilter();//创建IntentFilter对象             filter.addAction("wyf.wpf.MyService");              registerReceiver(cmdReceiver,filter);//注册Broadcast Receiver             doJob();//调用方法启动线程              returnsuper.onStartCommand(intent, flags, startId);       }       //方法:       public void doJob(){              newThread(){                     publicvoid run(){                           while(flag){                                  try{//睡眠一段时间                                        Thread.sleep(1000);                                  }                                  catch(Exceptione){                                        e.printStackTrace();                                  }                                  Intent intent = newIntent();//创建Intent对象                                 intent.setAction("wyf.wpf.Sample_3_6");                                  intent.putExtra("data",Math.random());                                 sendBroadcast(intent);//发送广播                           }                                              }                                  }.start();       }             private class CommandReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类              @Override              public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法                     int cmd =intent.getIntExtra("cmd", -1);//获取Extra信息                     if(cmd ==Sample_3_6.CMD_STOP_SERVICE){//如果发来的消息是停止服务                                                     flag = false;//停止线程                           stopSelf();//停止服务                    }              }                    }       @Override       public void onDestroy(){//重写onDestroy方法             this.unregisterReceiver(cmdReceiver);//取消注册的CommandReceiver             super.onDestroy();       }      }
建立一个activity
package com.andy;//声明包语句import android.app.Activity;//引入相关包import android.content.BroadcastReceiver;//引入相关包import android.content.Context;//引入相关包import android.content.Intent;//引入相关包import android.content.IntentFilter;//引入相关包import android.os.Bundle;//引入相关包import android.view.View;//引入相关包import android.view.View.OnClickListener;//引入相关包import android.widget.Button;//引入相关包import android.widget.TextView;//引入相关包//继承自Activity的子类public class Sample_3_6 extends Activity {       public static final int CMD_STOP_SERVICE =0;       ButtonbtnStart;//开始服务Button对象应用       Button btnStop;//停止服务Button对象应用       TextView tv;//TextView对象应用       DataReceiverdataReceiver;//BroadcastReceiver对象       @Override    public void onCreate(BundlesavedInstanceState) {//重写onCreate方法       super.onCreate(savedInstanceState);       setContentView(R.layout.main);//设置显示的屏幕       btnStart =(Button)findViewById(R.id.btnStart);       btnStop =(Button)findViewById(R.id.btnStop);       tv =(TextView)findViewById(R.id.tv);       btnStart.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听                                 @Override                     publicvoid onClick(View v) {//重写onClick方法                           Intent myIntent = new Intent(Sample_3_6.this,wyf.wpf.MyService.class);                          Sample_3_6.this.startService(myIntent);//发送Intent启动Service                    }              });       btnStop.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听                          @Override                     publicvoid onClick(View v) {//重写onClick方法                           Intent myIntent = newIntent();//创建Intent对象                          myIntent.setAction("wyf.wpf.MyService");                           myIntent.putExtra("cmd",CMD_STOP_SERVICE);                           sendBroadcast(myIntent);//发送广播                    }              });    }             private class DataReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类              @Override              public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法                     doubledata = intent.getDoubleExtra("data", 0);                    tv.setText("Service的数据为:"+data);                                 }                    }       @Override       protected void onStart(){//重写onStart方法              dataReceiver = newDataReceiver();              IntentFilter filter = newIntentFilter();//创建IntentFilter对象             filter.addAction("wyf.wpf.Sample_3_6");             registerReceiver(dataReceiver, filter);//注册BroadcastReceiver             super.onStart();       }       @Override       protected void onStop(){//重写onStop方法             unregisterReceiver(dataReceiver);//取消注册BroadcastReceiver             super.onStop();       }}



更多相关文章

  1. Android自定义UI实战(基础篇1)---组合控件封装
  2. Android(安卓)Studio 注解插件Android(安卓)ButterKnife Zelezny
  3. Android(安卓)图表框架
  4. 关于Android中ToolBar返回
  5. SystemUI编译遇到的问题
  6. Android(安卓)View 相关源码分析之二 继LayoutInflater来说
  7. Android(安卓)Home按键的监听与屏蔽方式
  8. Android(安卓)最强工具类的使用 .blankj:utilcode
  9. Android实现的视频背景

随机推荐

  1. ActionBar神奇魅力2
  2. Android(安卓)Layout xml 中的几个概念
  3. android listview实现表格样式
  4. android中字符替换成表情
  5. Android中的dispatchTouchEvent()、onInt
  6. android ListView 属性
  7. Android(安卓)设置没有 actionBar的 样式
  8. Android(安卓)studio修改打包后的apk的名
  9. 安卓9.0 http请求数据失败解决办法
  10. Android发送短信方法实例详解