Android EventLine框架制作过程 一 Activity上主线程的通信
2018-01-25 15:21
856 查看
github项目代码地址,欢迎start
https://github.com/979451341/EventLine 首先我要取名这个未来诞生的事件总线框架名字为EventLine,看起来不错吧,额,不过这是装X,这个系列的博客主要讲解如何实现事件总线,我的思路主要是通过泛型和反射来实现。
我做的事件总线传递信息是通过实体类,为了好用,这个实体类必须用户来定义,所以泛型就用上场了,然后存储各个Activity的时候都是保存为Activity类型,事件总线的接收函数名也是固定的,所以使用反射能够统一处理。
首先创建一个专门为了实现事件总线的工具类并用单例模式
然后我们需要保存各个Activity,顺便实现退出全部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的消息
完整的事件总线代码如下:
下一次就说如何实现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和Fragment之间的相互通信
- Android EventLine框架制作过程 二 Activity上主线程与子线程之间的通信
- Android EventLine框架制作过程 三 Activity和Fragment之间的相互通信
- Android EventLine框架制作过程 二 Activity上主线程与子线程之间的通信
- Android EventLine框架制作过程 四 Service、Activity、Fragm
- Android EventLine框架制作过程 四 Service与Activity、Fragment通讯
- Android中Activity、Service和线程之间的通信
- 适用Android 可用与activity 与 fragment相互通信的小框架
- 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、Service和线程之间的通信
- Android中Activity、Service和线程之间的通信 (2011-09-17 10:14:33)转载▼ 标签: android activity service 线程 之间 通信 it 分