我见过的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跳转的更多相关文章

  1. Android 手机卫士--解析json与消息机制发送不同类型消息

    本文地址:http://www.cnblogs.com/wuyudong/p/5900800.html,转载请注明源地址. 1.解析json数据 解析json的代码很简单 JSONObject jso ...

  2. Android 基础 十一 Android的消息机制

    Handler是Android消息机制的上层接口,这使得在开发应用过程中我们只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去 ...

  3. [转]Android进程间通信--消息机制及IPC机制实现

    Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...

  4. ios--->ios消息机制(NSNotification 和 NSNotificationCenter)

    问题的背景 IOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改 ...

  5. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  6. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  7. 页面解耦—— 统跳协议和Rewrite引擎

    原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...

  8. IOS 消息机制(NSNotificationCenter)

    消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...

  9. Android之消息机制Handler,Looper,Message解析

    PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...

随机推荐

  1. Java——jar命令

    把*.class压缩成一个文件,这样的文件就称为jar文件. 如果想要生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩. 当用户得到一个jar文件后,即可通过设 ...

  2. 使用Diagnose服务查看Azure网站诊断信息

    注意:当前操作只针对"基本"和"标准"模式的网站(也就是有独立实例的网站) 登陆网站的kudu模式:http://{yoursitename}.scm.chin ...

  3. Unity3D SceneView Camera

    http://forum.unity3d.com/threads/moving-scene-view-camera-from-editor-script.64920/

  4. iTunes访问自己应用的沙盒

  5. js的DOM对象

    1.js的Array对象           ** 创建数组(三种)                          - var arr1 = [1,2,3];                    ...

  6. 柱状堆积图Echarts

    Map<String,Object> map = new HashMap<String, Object>(); //图例的千人.双百 HashMap<String, St ...

  7. C# 协变out 、逆变 in

    需求:泛型使用多态性 备注:协变逆变只能修饰 接口和委托 简单理解: 1.使用 in 修饰后为逆变,只能用作形参使用 ,参考 public delegate void Action<in T&g ...

  8. step 4 GCD 队列演练

    串行队列 特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建 dispatch_queue_t q ...

  9. 新浪微博客户端(50)-解决输入Emotion表情逐渐变小的问题

    UITextView+Extension.h #import <UIKit/UIKit.h> @interface UITextView (Extension) /** 插入属性文本 */ ...

  10. eclipse的html代码辅助失效解决办法

    Eclipse IDE : .xhtml code assist is not working for JSF tag By mkyong | September 6, 2010 | Viewed : ...