Handler一般用于在工作线程(子线程)中去更新UI线程(主线程)的数据,如更新某个View的状态、刷新界面、弹出对话框等。为什么要使用Handler呢?什么时候需要使用工作线程呢?在开发中,一些比较耗时的操作,如大文件读写,数据库操作以及网络下载需要很长时间,如果全部在主线程中处理,会造成界面很卡,而且很容易出现ANR的响应提示窗口,这个时候我们可以考虑创建一个工作线程(继承Thread类或者实现Runnable接口)来解决。但是对于Android平台来说UI线程不是线程安全的,使用工作线程更新UI会出现异常,所以需要引入一些同步的机制来处理,Handler因此就产生了。可以在UI线程中创建一个Handler对象,实现它的handleMessage(Message
msg)方法,它与工作线程中间通过Message来传递数据。本文只简单的讲述handler的使用,下一篇将详细讲述Android的消息处理机制。
下面我们通过一个简单的demo来了解hander的实际使用。该demo通过一个子线程更新TextView的值。
MainActivity.java
public class MainActivity extends Activity {
private TextView mTextView;
private Button mButton;
private static final int UPDATE_TEXTVIEW = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)this.findViewById(R.id.textview);
mButton = (Button)this.findViewById(R.id.button);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Thread t = new Thread(new UpdateThread());
t.start();
}
});
}
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch(msg.what) {
case UPDATE_TEXTVIEW:
mTextView.setText("尼玛,敢改我的值~~");
break;
}
}
};
private class UpdateThread implements Runnable {
public void run() {
Message msg = mHandler.obtainMessage();
msg.what = UPDATE_TEXTVIEW;
msg.sendToTarget();
}
}
}
点击更新按钮,会发现TextView的值已被更改。如果不使用handler会出现什么情况?现在把run方法里的代码注释掉,然后把给TextView赋值的代码放到run方法里,点击更新按钮,会出现下面的异常。android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a
view hierarchy can touch its views.
转载请注明来自:Alex
Zhou,本文链接:http://codingnow.cn/android/578.html
分享到:
相关推荐
NULL 博文链接:https://txlong-onz.iteye.com/blog/934957
Android的Handler使用方法总结,不错的文档,跟大家分享分享
Android Handler传值的,简单的介绍了Handler的用法
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
android Handler的使用,我也刚开始学习,从别处下载了给大家分享
NULL 博文链接:https://dingran.iteye.com/blog/1930178
android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。
Android Handler Looper
android handler runnable使用实例(关键是内部run中停止)
android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。
android handler的一些测试,套用他人的代码做的一些测试,多个线程sendmessage,该由那个handler处理?
Android中handler的使用,处理多线程的使用
比较简单的handler例子,通过接受消息改变图片展示
本资源是自己文章的demo的代码,以及android 系统部分的源代码
在Android开发中,我们经常会遇到这样一种情况:在UI界面上进行某项操作后要执行一段很耗时的代码,比如我们在界面上点击了一个”下载“按钮,那么我们需要执行网络请求,这是一个耗时操作,因为不知道什么时候才能...
Android Handler详细解析,讲解Handler之间的通讯,叫你如果用Handler完成异步线程对 UI的更新
android 中Handler 的几种写法,很简单的demo,大神简单修改下,用的是Handler.Callback,的方法
Android review handler的使用
Android Handler AsyncTask 异步加载
Android Handler使用方法,Button事件响应处理,Activity切换