您的位置:首页 > 产品设计 > UI/UE

android 之 Handler 详解----(三)更新UI的方法

2015-05-06 20:07 471 查看
对子线程更新UI的方法进行了了解,大概可以分以下几种方式,其实本质上都是通过Handler来对UI进行更新,只是变表现手法有所不同。

1. 通过UI 线程中的 handler.post (new runnable(){ }) 的方法进行UI的更新;

2. 常见的handler.sendMessage()

3. runOnUiThread(new runnable(){}) 进行UI的更新;

4. View.post(new Runnable(){})进行UI的更新

下面用代码进行各种更新方法实现:

代码中分了四个按键进行操作,每个按键都会起一个子线程,并进行更新UI的操作

四种方法,都一一展现出来

package com.example.handleruidemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
private Button handlerPost, handlerSendMsg, runUiThread, viewPost;
private TextView tV;

private Handler handlerPostHandler = new Handler();
private Handler handlerSendMsgHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tV.setText("handlerSendMsg OK");
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}

private void initView() {
handlerPost = (Button) findViewById(R.id.handlerPost);
handlerSendMsg = (Button) findViewById(R.id.handSendmessage);
runUiThread = (Button) findViewById(R.id.runUiThread);
viewPost = (Button) findViewById(R.id.ViewPost);
tV = (TextView) findViewById(R.id.textView1);

handlerPost.setOnClickListener(this);
handlerSendMsg.setOnClickListener(this);
runUiThread.setOnClickListener(this);
viewPost.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
// 利用UI的handler的 Post方法
case R.id.handlerPost:
new Thread() {
public void run() {
System.out.println(Thread.currentThread().getName() + "------ handlerPost");
//重点在这里
handlerPostHandler.post(new Runnable() {
@Override
public void run() {
// 实际运行就是在UI线程,所以可以更新UI操作
System.out.println(Thread.currentThread().getName()+ "---handlerPost check");
tV.setText("handlerPost OK");
}
});
};
}.start();

break;

// 一般的 sendMessage的方法
case R.id.handSendmessage:
new Thread() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "---handSendMsg Check");
Message msg = new Message();
msg.what = 1;
//重点在这里
handlerSendMsgHandler.sendMessage(msg);
}
}.start();
break;
// runUiThread 的方法
case R.id.runUiThread:
new Thread() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+ "---runUiThread Check");
//重点在这里
runOnUiThread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName()+ "---runUiThread Check");
tV.setText("runUiThread Check");
}
});
}
}.start();
break;
// ViewPost 的方法和 handler.post的方法有点类似
case R.id.ViewPost:
new Thread() {
public void run() {
System.out.println(Thread.currentThread().getName()+ "------ ViewPost Check");

//重点在这里
tV.post(new Runnable() {
@Override
public void run() {
// 实际运行就是在UI线程,所以可以更新UI操作
System.out.println(Thread.currentThread().getName()+ "---ViewPost check");
tV.setText("ViewPost OK");
}
});
};
}.start();
break;

default:
break;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: