zoukankan      html  css  js  c++  java
  • 用消息机制解耦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监听器被初始化

  • 相关阅读:
    lecture 11.4
    lecture 10.30
    boolean functions and beyon
    lecture10.21
    golang hex to string
    golang中 将string转化为json
    ubuntu16报错: add-apt-repository command not found
    ubuntu16的防火墙关闭
    ubuntu 16 解决错误 manpath: can't set the locale; make sure $LC_* and $LANG are correct
    go get 安装时报 (https fetch: Get https://golang.org/x/crypto/acme/autocert?go-get=1: dial tcp 220.255.2.153:443: i/o timeout)
  • 原文地址:https://www.cnblogs.com/mosthink/p/5289017.html
Copyright © 2011-2022 走看看