相信大家写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);
}
}
博客介绍了如何封装全局Handler,通过创建一个继承自Handler的GlobalHandler类,并重写handleMessage()方法。它还引入了一个HandleMsgListener接口,用于在接收到消息时调用用户的自定义处理方法。


被折叠的 条评论
为什么被折叠?



