Android EventLine框架制作过程 一 Activity上主线程的通信
2018-01-30 19:28
489 查看
github项目代码地址,欢迎start
https://github.com/979451341/EventLine
首先我要取名这个未来诞生的事件总线框架名字为EventLine,看起来不错吧,额,不过这是装X,这个系列的博客主要讲解如何实现事件总线,我的思路主要是通过泛型和反射来实现。
我做的事件总线传递信息是通过实体类,为了好用,这个实体类必须用户来定义,所以泛型就用上场了,然后存储各个Activity的时候都是保存为Activity类型,事件总线的接收函数名也是固定的,所以使用反射能够统一处理。
首先创建一个专门为了实现事件总线的工具类并用单例模式
然后我们需要保存各个Activity,顺便实现退出全部Activity
现在能够在Activity里注册和注销了
但是真正的功能还没实现,遍历保存的Activity,然后通过反射调用receive函数,并通过泛型把参数传输通过
在Activity里添加接收函数
触发消息传递
效果良好
01-25 14:20:57.673 22209-22209/com.example.zth.eventline V/zzw: MainActivity 接收到了来自ThreeActivity的消息
01-25 14:20:57.673 22209-22209/com.example.zth.eventline V/zzw: TwoActivity 接收到了来自ThreeActivity的消息
完整的事件总线代码如下:
public class EventLine<T> {
public static EventLine eventLine;
}
下一次就说如何实现Activity上主线程和子线程的通讯
https://github.com/979451341/EventLine
首先我要取名这个未来诞生的事件总线框架名字为EventLine,看起来不错吧,额,不过这是装X,这个系列的博客主要讲解如何实现事件总线,我的思路主要是通过泛型和反射来实现。
我做的事件总线传递信息是通过实体类,为了好用,这个实体类必须用户来定义,所以泛型就用上场了,然后存储各个Activity的时候都是保存为Activity类型,事件总线的接收函数名也是固定的,所以使用反射能够统一处理。
首先创建一个专门为了实现事件总线的工具类并用单例模式
public static EventLine eventLine; private EventLine(){ } public static EventLine getInstance(){ if(eventLine == null){ synchronized (EventLine.class){ if(eventLine == null) eventLine = new EventLine(); } } return eventLine; }
然后我们需要保存各个Activity,顺便实现退出全部Activity
private ArrayList<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity){ activities.add(activity); } public void removeActivity(Activity activity){ activities.remove(activity); } public void finishAll(){ for(Activity activity : activities){ activity.finish(); } }
现在能够在Activity里注册和注销了
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventLine.getInstance().addActivity(this); } @Override protected void onDestroy() { EventLine.getInstance().removeActivity(this); super.onDestroy(); }
但是真正的功能还没实现,遍历保存的Activity,然后通过反射调用receive函数,并通过泛型把参数传输通过
public void postData(T ojb){ for(Activity activity : activities){ Class<? extends Activity> cls = activity.getClass(); try { Method declaredMethod = cls.getDeclaredMethod("receive", ojb.getClass()); declaredMethod.invoke(activity, (Object) ojb); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } }
在Activity里添加接收函数
public void receive(DataBean dataBean){ Log.v("zzw","MainActivity 接收到了"+dataBean.data); }
触发消息传递
DataBean dataBean = new DataBean(); dataBean.data = "来自ThreeActivity的消息"; EventLine.getInstance().postData(dataBean);
效果良好
01-25 14:20:57.673 22209-22209/com.example.zth.eventline V/zzw: MainActivity 接收到了来自ThreeActivity的消息
01-25 14:20:57.673 22209-22209/com.example.zth.eventline V/zzw: TwoActivity 接收到了来自ThreeActivity的消息
完整的事件总线代码如下:
public class EventLine<T> {
public static EventLine eventLine;
private EventLine(){
}
public static EventLine getInstance(){
if(eventLine == null){
synchronized (EventLine.class){
if(eventLine == null)
eventLine = new EventLine();
}
}
return eventLine;
}
private ArrayList<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity){ activities.add(activity); } public void removeActivity(Activity activity){ activities.remove(activity); } public void finishAll(){ for(Activity activity : activities){ activity.finish(); } }
public void postData(T ojb){ for(Activity activity : activities){ Class<? extends Activity> cls = activity.getClass(); try { Method declaredMethod = cls.getDeclaredMethod("receive", ojb.getClass()); declaredMethod.invoke(activity, (Object) ojb); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } }
}
下一次就说如何实现Activity上主线程和子线程的通讯
相关文章推荐
- Android EventLine框架制作过程 一 Activity上主线程的通信
- Android EventLine框架制作过程 二 Activity上主线程与子线程之间的通信
- Android EventLine框架制作过程 二 Activity上主线程与子线程之间的通信
- Android EventLine框架制作过程 三 Activity和Fragment之间的相互通信
- Android EventLine框架制作过程 三 Activity和Fragment之间的相互通信
- Android EventLine框架制作过程 四 Service与Activity、Fragment通讯
- Android EventLine框架制作过程 四 Service、Activity、Fragm
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- 适用Android 可用与activity 与 fragment相互通信的小框架
- Android中Activity、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信
- android中Activity,Service和线程之间的通信