线程中刷新UI

来源:互联网 发布:淘宝广告形式雷达 编辑:程序博客网 时间:2024/05/16 15:50
第一种:
new Handler(context.getMainLooper()).post(new Runnable() {     @Override    public void run() {        // 在这里执行你要想的操作 比如直接在这里更新ui或者调用回调在 在回调中更新ui     }});




第二种:
<pre name="code" class="java">// 如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程// 因为runOnUiThread是Activity中的方法,Context是它的父类,所以要转换成Activity对象才能使用((Activity) context).runOnUiThread(new Runnable() {     @Override    public void run() {        // 在这里执行你要想的操作 比如直接在这里更新ui或者调用回调在 在回调中更新ui    }});
第三种:

第三种是使用Handler的方法,往Handler中发送一个消息,然后当Handler接收到你发送过来的消息,再在Handler执行相应的操作这是接收消息执行的代码:

private Handler handler = new Handler() {     @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);         switch (msg.what) {        case 1:            button1.setText("点击安装");            down = 1;            break;        case 2:            down = 2;            button1.setText("打开");            break;        }    } };



这是发送消息的代码:
// 往handler发送一条消息 更改button的text属性Message message = handler.obtainMessage();message.what = 1;handler.sendMessage(message);

第四种:

 final Handler handler = new Handler(){       public void handleMessage(Message msg) {           switch (msg.what) {                  case 1:                       recLen++;       recTime.setText(GetRecTime(recLen));                 break;                    }                    super.handleMessage(msg);            }          }; 

下面定实例化一个TimerTask,这个是为Timer提供一个定时执行的内容。我在这个方法中加的是给Handler一个发送消息功能,因这在Timer的线程中,无法直接操作UI线程。
TimerTask task = new TimerTask(){        public void run() {        Message message = new Message();            message.what = 1;            handler.sendMessage(message);       }  };

执行timer计时器,定时刷新UI:
 timer = new Timer(true); timer.schedule(task,1000, 1000); //延时1000ms后执行,1000ms执行一次 //timer.cancel(); //退出计时器



0 0