android中的Handler和Callback机制
来源:互联网 发布:苹果接电话变声软件 编辑:程序博客网 时间:2024/05/20 09:44
Handler是android中的一种异步机制,主要通过消息机制实现.
1,发消息
如sendMessage(Message msg)
2,处理消息
如handleMessage(Message msg)
3,哪个Handler能够处理消息
msg的Target确定了哪个Handler能够处理,
Message里面有两个方法
Handler getTarget()
getTarget方法获取到当前消息的Target,这个Target可以处理消息;
setTarget(Handler target)
setTarget方法设置一个能够处理这个消息的Handler,显然此时可以自定义一个Handler
4,使用Handler和Callback调用方法
使用场景:class A 调用class B.c(String)方法,在A中不能直接new B的时候
class A{ public void A_call_B_c(String str){//A调用B的c(String)方法 Call_Listener call_Listener_old = new Call_Listener() { @Override public void cCallback(Map<String, Object> callBackMap) { //处理B.c(String)返回的结果数据 } }; Handler.Callback instance=createB_instance();//创建B的对象,不能直接new B //比如采用动态加载方式创建B的对象 Map<String, Object> map= new HashMap<String, Object>(); map.put(ABConstd.ataParam_1, str); map.put(ABConst.dataCall_Listener_old, call_Listener_old); map.put(ABConst.dataClass_Instance, instance); SDKCall.startRoot(map); Acall.callBc(map); } private Handler.Callback createB_instance(){ return (Handler.Callback)createB_by_DexClassLoader(); //createB_by_DexClassLoader()中使用动态加载方式创建一个B的实例, //采用DexClassLoader加载一个jar,或者dex,或者apk中的B.class //请参考DexClassLoader实现createB_by_DexClassLoader() }}class Acall{ public static callBc(Map<String, Object> callMap){ Message callMsg = new Message(); callMsg .what = ABConst.Call_Msg; callMsg .obj = callMap; callMsg.setTarget(new Handler() { @Override public void handleMessage(Message callBackMsg) { if (ABConst.Call_Back_Msg == callBackMsg.what) { } } } Handler.Callback instance = (Callback) callMap .get(ABConst.dataClass_Instance); instance.handleMessage(callMsg ); }}public class A_B_Callbcak implements Handler.Callback { @Override public boolean handleMessage(Message msg) { return BCall.handleMessage(this, msg); } public void c(final Map<String, Object> map) { }}class B extends A_B_Callbcak{ public void c(final Map<String, Object> map) { //取出参数,使用map数据完成方法的逻辑 String one=map.get(ABConst.dataParam_1); othersLogic(); //处理完毕,给A返回处理结果 Call_Listener call_Listener_new=(Call_Listener) map.get(ABConst.dataCall_Listener_new); Map<String, Object> callBackMap=new HashMap<String, Object>(); callBackMap.put(ABConst.dataResult, "B.c()返回的结果"); call_Listener_new.cCallback(callBackMap); }}class Bcall { public static boolean handleMessage(Callback callbcak, Message msg) { switch (msg.what) { case ABConst.Call_Msg: handleCallMsg(callbcak, msg); break; } return false; } private static void handleCallMsg(Callback callbcak, final Message msg) { if (ABConst.Call_Msg == msg.what) { A_B_Callbcak abCallbcak = (A_B_Callbcak) callbcak; // A传给B的Map数据 Map<String, Object> callMap = (Map<String, Object>) msg.obj; //重新封装一个Call_Listener,B使用这个Call_Listener发送消息给A, //消息中包含了B.c()方法执行完毕的结果 Call_Listener call_Listener_new = new Call_Listener() { Handler mHandler = (Handler) msg.getTarget(); @Override public void cCallback(Map<String, Object> callBackMap) { Message callBackMsg = new Message(); callBackMsg .obj = callBackMap; callBackMsg .what = ABConst.Call_Back_Msg; mHandler.handleMessage(callBackMsg ); } }; //记得将Call_Listener 放置到map中,记得传给B callMap.put(ABConst.d.ataCall_Listener_new, call_Listener_new ); // B处理A发送的Call_Msg消息,A---map数据--->B abCallbcak .c(callMap); } }}final class ABConst{ //消息标识 public static final int Call_Msg= 0x99;//Call_Back_Msg.what public static final int Call_Back_Msg= 0x100;//Call_Back_Msg.what //A给B的数据参数名字 public static final String dataParam_1="dataParam_1"; public static final String dataCall_Listener_old="dataCall_Listener_old"; public static final String dataCall_Listener_new="dataCall_Listener_new"; public static final String dataClass_Instance="dataClass_Instance"; //B给A的数据参数名字 public static final String dataResult="dataResult";}
0 0
- android中的Handler和Callback机制
- android中的Handler和Callback机制
- android中的Handler和Callback机制
- android中的Handler和Callback机制
- Android的handler和callback机制
- Android中的Thread, Looper和Handler机制
- Android中的Handler机制分析(一) Handler和Message分析
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- Android中的Handler机制
- spring框架初步了解(第二篇)
- iOS系列UI篇——UIVisualEffectView
- JSON使用ObjectCreationHandling 反序列化替换不重复的值
- Xcode7使用MJ的NSObject+Value出现Too many arguments to function call,expected 0,have 3
- c语言输入菱形
- android中的Handler和Callback机制
- 第十二周项目4-利用遍历思想求解图问题(7)
- js中typeof的用法汇总
- 编程判断3人中谁的年龄最大,并打印最大者的年龄
- 第四周 项目四 建设双链表算法库
- LeetCode 222 Count Complete Tree Nodes
- 第十五周项目3 - B-树的基本操作
- 【Codeforces Round 269 (Div 2)A】【简单讨论】MUH and Sticks 6根木棍拼动物
- 第十五周 项目2 用哈希法组织关键字