我见过的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. 10月21上午PHP基础

    新建的php文件必须要放在wamp安装目录下的www文件夹里.如果拿到别的地方,php无法运行,将显示错误. <?php?> //嵌入php的方式 <?php //嵌入php方式的开 ...

  2. /MD, /MT, /LD (Use Run-Time Library)

    https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx

  3. yourphp 的 ThinkTemplate.class.php与ContentReplaceBehavior.class.php

    ThinkTemplate.class.php :去掉版权(针对html代码) ContentReplaceBehavior.class.php:一些默认标签的路劲,如:__PUBLIC__,../P ...

  4. input的onkeyup效果 超级简短代码

    效果代码 title="请输入正确的十六位数字" onkeyup="javascript: return this.value = this.value.toUpperC ...

  5. 快捷键_Mac

    苹果Mac系统常用快捷键 Command+Tab 任意情况下切换应用程序 - 向前循环 Shift+Command+Tab 切换应用程序 - 向后循环 Command+L 当前程序是浏览器时,可以直接 ...

  6. vs2013使用C#6.0

    安装 nuget Microsoft.Net.Compilers

  7. Python操作Redis、Memcache、RabbitMQ、SQLAlchemy

    Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...

  8. SCWS分词扩展在WINDOWS下的安装方法

    安装之前先确认您是否拥有主机的安装权限,否则无法进行安装,安装步骤如下: 1. 根据您当前用的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库. 目前支持以下版本   [PHP-4 ...

  9. OC-copy

    一,堆与栈 1,栈区,stack: 后进先出,由编译器自动分配并释放,一般存放函数的参数值.局部变量 2,堆区,heap:先进先出,由程序员分配和释放 3,全局区,静态区:程序结束后由系统释放, 4, ...

  10. 全选,全不选,反选的js实现

    全选练习       ** 使用复选框上面一个属性判断是否选中                   - checked属性                   - checked=true:选中    ...