Handler的作用

Handler  属于包import android.os.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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值