全局Handler的封装

博客介绍了如何封装全局Handler,通过创建一个继承自Handler的GlobalHandler类,并重写handleMessage()方法。它还引入了一个HandleMsgListener接口,用于在接收到消息时调用用户的自定义处理方法。
       相信大家写Android项目的时候,使用Handler发送消息是非常常见的,可以说在项目中有非常多的地方使用到Handler,于是这时候考虑怎么去封装一个Handler,使用的时候也比较方便,又可以避免重复去创建Handler对象,我们会想到全局就使用一个Handler,那么怎么全局去封装一个Handler的,我是这么来设计的:

      首先定义一个类GlobalHandler,继承Handler,然后重写它的handleMessage()方法,然后我们在内部定义一个HandleMsgListener接口,接口中定义一个处理消息的抽象方法handleMsg(),handler收到消息后,就会回调handleMessage()去处理消息,然后我们在这个方法去调用我们接口HandleMsgListener中的handleMsg()方法,在使用的时候,用户自己去处理这个消息,具体代码如下:

 

package com.lxz.custom;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

/**
 * Created by Administrator on 2018/4/17 0017.
 */

public class GlobalHandler extends Handler{

    private HandleMsgListener listener;
    private String Tag = GlobalHandler.class.getSimpleName();

    //使用单例模式创建GlobalHandler
    private GlobalHandler(){
        Log.e(Tag,"GlobalHandler创建");
    }

    private static class Holder{
        private static final GlobalHandler HANDLER = new GlobalHandler();
    }

    public static GlobalHandler getInstance(){
        return Holder.HANDLER;
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        if (getHandleMsgListener() != null){
            getHandleMsgListener().handleMsg(msg);
        }else {
            Log.e(Tag,"请传入HandleMsgListener对象");
        }
    }

    public interface HandleMsgListener{
        void handleMsg(Message msg);
    }

    public void setHandleMsgListener(HandleMsgListener listener){
        this.listener = listener;
    }

    public HandleMsgListener getHandleMsgListener(){
        return listener;
    }

}

 

package com.lxz.custom;

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements GlobalHandler.HandleMsgListener{
    private GlobalHandler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler = GlobalHandler.getInstance();
        mHandler.setHandleMsgListener(this);
        mHandler.sendEmptyMessage(0);
        mHandler.sendEmptyMessage(1);
    }


    @Override
    public void handleMsg(Message msg) {
        switch (msg.what){
            case 0:
                Toast.makeText(MainActivity.this,"test0",Toast.LENGTH_SHORT).show();
                break;
            case 1:
                Toast.makeText(MainActivity.this,"test1",Toast.LENGTH_SHORT).show();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁移除所有消息,避免内存泄露
        mHandler.removeCallbacks(null);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值