用消息机制解耦Activity跳转
我见过的Activity方式有三种:
1, 默认的,在一个Activity里创建一个Intent,然后startActivity/startActivityForResult;
2, 给被跳转到的Activity编写静态方法,发起跳转的代码调用这个静态方法,直接传参数,不用构造Intent。数据压入Intent的工作交给被跳转到的Activity处理而不是发起跳转的代码。这样更多的控制权(比如跳转方式,Intent flag等)就交给了被跳转的Activity。
public class ShowSthActivity extends Activity {
public static void jumpTo(Activity srcActivity, Intent intent, int value, boolean udpate, ...) {
Intent intent = new Intent(srcActivity, ShowSthActivity.class);
intent.addFlag.....;
intent.putExtra....
srcActivity.startActivity(intent);
}
}
假如目标是解耦,为了让互相跳转的Activity之间互相不认识,分散在不同的工程里,可独立编译通过,如何做呢?
3, 用消息跳转。原理就是每个Activity都注册一个消息监听器,该监听器监听一个跳转到自己的Message,当收到这个Message的时候,Activity进行跳转。发起跳转的代码只管发送这个Message就可以。这样一来,Activity A跳转到Activity B的时候,A发送一个JumpToBMessage,B监听JumpToBMessage,它们共同认识JumpToBMessage,但是互相却不认识,实现了解耦。
这里面的关键是JumpToBMessage的实现,它要接收发起跳转的Activity A传递的参数,并将其压进Intent,当Activity B通过消息机制收到JumpToBMessage对象的时候,可以从其中拿出Intent,然后startActivtity(intent, class),这里这个class就是自己。等于是把startActivity(intent, class)中的参数class延迟给出,让B自己写上而不是让A来写。
另外监听跳转消息的代码要static,并且要在应用启动的时候都“类装入一下”以让static监听器被初始化。
用消息机制解耦Activity跳转的更多相关文章
- Android 手机卫士--解析json与消息机制发送不同类型消息
本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...
- Android 基础 十一 Android的消息机制
Handler是Android消息机制的上层接口,这使得在开发应用过程中我们只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去 ...
- [转]Android进程间通信--消息机制及IPC机制实现
Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...
- ios--->ios消息机制(NSNotification 和 NSNotificationCenter)
问题的背景 IOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- Android消息传递之Handler消息机制
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...
- 页面解耦—— 统跳协议和Rewrite引擎
原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...
- IOS 消息机制(NSNotificationCenter)
消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...
- Android之消息机制Handler,Looper,Message解析
PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...
随机推荐
- matlab————矩阵输出到txt
matlab如何输出矩阵到txt并指定数的精度 (2013-11-20 16:50:43)转载▼ 标签: matlab 输出数据 假设你的数据矩阵为a; [m n] = size(a); [filen ...
- 关于Linux发行版的选择
Linux发行版很多,分为以RedHat为代表的商业发行版和以Debian为代表的免费发行版.前者典型版本有CentOS.Fedora.SUSE等,后者的典型版本有Ubuntu等 CentOS.Ubu ...
- C语言生成服从均匀分布, 瑞利分布, 莱斯分布, 高斯分布的随机数
用c语言 产生服从均匀分布, 瑞利分布,莱斯分布,高斯分布的随机数 一,各个分布对应的基本含义: 1. 均匀分布或称规则分布,顾名思义,均匀的,不偏差的.植物种群的个体是等距分布,或个体之间保持一 ...
- MySQL-curses/termcap缺失
环境:通前篇 1.错误:缺少 /curses/temrcap checking for termcap functions library... configure: error: No curses ...
- ServiceBase 备份
using CanDoo.Contracts; using CanDoo.Core.Data; using System; using System.Collections.Generic; usin ...
- iOS数据库学习(1)-安装Navicat
1.下载Navicat Premium 11.0.16.dmg 已经放到百度网盘,里面有安装文件和注册机 下载链接: http://pan.baidu.com/s/1sjI64HZ 密码: 2h7q ...
- Memcached 简介、安装和基本使用
本章包括内容: 一.Memcached是什么.能干什么.特点; 二.在Centos7上安装Memcached 三.Memcached启动.简单操作.关闭------------------------ ...
- AngularJS API之isXXX()
Angular中保存了很多的判断方法,可以用来验证对象是否符合某种要求,详细的参考代码样例即可 <html> <head> <meta http-equiv=" ...
- web 开发前端学习
调试插件:http://www.getpostman.com/ http://bootstrap.evget.com/javascript.html bootstrap: http://www.bo ...
- nyoj 252 01串 动态规划( java)
当n=2时, 输出 3:当n=3时, 输出 5:当n=4时, 输出 8: #### 分析: 当n=4时,如 0101 符合条件, 当第一个位置是0时,还剩3个位置 ,与n=3时个数相等: 符合条件的为 ...