Android Handler 机制详解 (一)用法全解

mm.jpeg
ps:这是关于Android Handler 机制的第一篇文章,主要来说一下Handler的用法,本文尽量归纳完全,如有缺漏,欢迎补充。

Handler的主要作用是切换线程,以及隐式的充当接口回调的作用,当子线程网络请求结束后,通过handler发送消息给主线程,这一点都不多说了。

常用用法

先来贴一种最常用的用法:

	private Handler mHandler = new Handler() {
   
        @Override
        public void handleMessage(@NonNull Message msg) {
   
            super.handleMessage(msg);
            //...处理逻辑
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.bt_1).setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                mHandler.sendEmptyMessage(MainActivity.HANDLER_MAIN_CODE);
            }
        });

这种方法是大家最常用的,使用Handler的匿名内部类,去覆写handleMessage方法,来处理当消息到达时所做出的反应。这里埋一个伏笔:

报黄
这里IDEA在提示可能会发生内存泄漏,具体为什么会发生内存泄漏,针对问题的具体分析以及最后封装SafeHandler,我会在第三篇Handler文章中讲述。

Message
Message是Handler发送的消息的数据载体。

先看一下Message,Message用来承载数据,承载数据的实现是Message的几个public的成员变量:

	public int what;

    public int arg1;

    public int arg2;

    public Object obj;
  
  • what: 这是一个int类型的变量,通常用来在handleMessage处做判断,当一个handler发送多条message时,用来辨别这是哪一条消息
  • arg1,arg2,当发送的Message需要承载的data是整数时,可以简单的使用这两个参数来承载。
  • Obj,这是一个Object对象,因为有这个变量,我们所能承载的data就多样化了,只要是对象都可以通过message传递,List、数组等等。
    另外Message还提供了通过Bundle来传递数据:
    Bundle也是一个数据载体,这里就不多说了。
/**
     * Like getData(), but does not lazily create the Bundle.  A null
     * is returned if the Bundle does not already exist.  See
     * {@link #getData} for further information on this.
     * @see #getData()
     * @see #setData(Bundle)
     */
    public Bundle peekData() {
   
        return data;
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值