每次需要根据网络请求或其他耗时操作去更新UI内容的时候都会首先想到使用handler去实现,今天写个最简单的实例,防止以后要写都要先去百度。
先声明自己的thread
private Thread mThread;
然后写自己的handler
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what ==1){
Bundle data = msg.getData();
String val = data.getString("value");
//拿到数据之后在这里写更新UI的操作
//textView.setText(val);
}
}
};
然后就是Runnable了
Runnable runnable = new Runnable() {
@Override
public void run() {
//这里最好写成函数,在其他你需要的地方传入你的handler
//如ParseData.getResult(jsonStr, mHandler);
Message msg = new Message();
//用bundle写入你要传的数据
Bundle data = new Bundle();
data.putString("value", htmlStr);
msg.what = 1;
msg.setData(data);
};
然后就可以在你的onCreateView里面使用了
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(mThread == null){
mThread = new Thread(runnable);
mThread.start();
}
}
这样的写法个人觉得比较规范,一般还有下一种写法,直接百度了一个。这个个人觉得在确定thread只会被执行一次的时候使用
new Thread( new Runnable() {
public void run() {
myView.invalidate();
}
}).start();