AyoActivityNoManifest

Activity 代理框架
授权协议 Apache
开发语言 Java
所属分类 手机/移动开发、 手机开发包
软件类型 开源软件
地区 国产
投 递 者 晏德佑
操作系统 Android
开源组织
适用人群 未知
 软件概览

1 这是什么?

  • 这个库提供了:

    • 一个轻量级的Activity代理框架(ActivityAttacher,使用方式基本和Activity一样),目的在于不必在Manifest反复声明Activity

    • 同时提供了一个轻量级的Bundle机制(SimpleBundle,使用方式基本和Bundle一样),目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信

    • 提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)

    • 状态栏一体化的简单封装

    • Activity和Fragment状态保存的问题

    • 其他Activity和Fragment问题的解决方案,后期一个一个加

2 ActivityAttacher的使用

        (1) manifest

  • manifest里只需要声明:

    • 主Activity

    • 有特殊需求的Activity,如支持旋转

    • 模板Activity,暂时只支持一个启动模式对应一个模板Activity

    • 模板Activity有几个默认配置项,如果需要更改,也需要声明自己的Activity

Manifest中的声明:

<activity
            android:name="com.cowthan.sample.MainActivity"
            android:configChanges="orientation|screenSize|keyboardHidden|navigation"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="org.ayo.app.base.TmplActivityStandard"
            android:configChanges="orientation|screenSize|keyboardHidden|navigation"
            android:screenOrientation="portrait"
            android:launchMode="standard"
            android:theme="@style/AyoTransparentTheme" />

        <activity
            android:name="org.ayo.app.base.TmplActivitySingleTask"
            android:configChanges="orientation|screenSize|keyboardHidden|navigation"
            android:screenOrientation="portrait"
            android:launchMode="singleTask"
            android:theme="@style/AyoTransparentTheme" />

        <activity
            android:name="org.ayo.app.base.TmplActivitySingleTop"
            android:configChanges="orientation|screenSize|keyboardHidden|navigation"
            android:screenOrientation="portrait"
            android:launchMode="singleTop"
            android:theme="@style/AyoTransparentTheme" />

        <activity
            android:name="org.ayo.app.base.TmplActivitySingleInstance"
            android:configChanges="orientation|screenSize|keyboardHidden|navigation"
            android:screenOrientation="portrait"
            android:launchMode="singleInstance"
            android:theme="@style/AyoTransparentTheme" />

    (2) ActivityAttacher

  • ActivityAttacher的意义:

    • ActivityAttacher就是附着在上面4个模板Activity里的Activity代理

    • ActivityAttacher中持有一个Activity实例对象,是在onCreate时赋值的

    • ActivityAttacher可以处理Activity中的所有配置和生命周期

    • ActivityAttacher提供的接口,原则上应该完全仿Activity,这一点类似v7源码中的和AppCompactActivity相关的一个delegate类,但不知道这个类是干什么用的

(3) 定义Activity

看代码,这两个只有基类不一样,内部代码应该是一样的,其中继承AyoActivity的是一个普通Activity,需要去manifest声明,而继承AyoActivityAttacher,就不需要再去manifest声明了

public class SampleActivity extends AyoActivityAttacher{

    public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){
        SimpleBundle sb = new SimpleBundle();
        sb.putExtra("takeSystemBar", takeSystemBar);
        ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_tmpl);
    }
}

public class SampleActivity extends AyoActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_tmpl);
    }
}

    (4) 启动ActivityAttacher

启动方式变成这样:

public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){
    SimpleBundle sb = new SimpleBundle();
    sb.putExtra("takeSystemBar", takeSystemBar);
    ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack);
}
  • SimpleBundle:功能类似于intent或者bundle,存的是传到下一个Activity的参数

    • 取出参数:boolean takeSystemBar = getIntent().getBooleanExtra("takeSystemBar");

    • 这里,在Activity之间传的都是引用,不再需要考虑序列化问题,当然只适用于app单进程内

  • OnResultCallBack是接收Activity的回传结果

    • 如何回传:getResultCallback().onResult("代替OnActivityReslt和setResult"); finish();

  • lanuchMode是选择Activity的启动模式,也就是选择模板:

    • ActivityAttacher.LAUNCH_MODE_STANDARD

    • ActivityAttacher.LAUNCH_MODE_SINGLE_TASK

    • ActivityAttacher.LAUNCH_MODE_SINGLE_TOP

    • ActivityAttacher.LAUNCH_MODE_SINGLE_INSTANCE

    (5) Activity主题

这里提供了两个主题:AyoTransparentTheme和AyoTheme,没啥特殊的

 相关资料
  • 在我的用例场景中,我在服务中实现了聚合、Sagas和EventHandlers。我还添加了Amazon X-Ray,它收集方法执行过程中的数据点,并将这些数据段发送到AWS以获取分布式跟踪信息。 我的问题是:要成功地在Axon框架(稍后,我将把切入点扩展到EventHandler、SagaEventHandler、QueryHandler和CommandHandler等)和AWS X射线或任何其他

  • 问题内容: 我使用JADE框架作为依赖项创建了一个maven项目,但是与普通的Java应用程序相比,该框架需要不同的命令来执行jar。 建立: 跑: 哪里是 要么 是否可以使用maven插件构建 可运行的jar, 所以我只需键入而不是上面的命令? 将编辑命令后Eclipse项目的变化构建参数 的pom.xml 文件? 问题答案: JADE没有可用的此类插件,因为它没有得到广泛使用的框架,而且没有人

  • 本文向大家介绍python3 Scrapy爬虫框架ip代理配置的方法,包括了python3 Scrapy爬虫框架ip代理配置的方法的使用技巧和注意事项,需要的朋友参考一下 什么是Scrapy?   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。

  • 我的任务是确定构建一个应用程序的可行性,该应用程序将充当提供单点登录功能的平台之间的代理。 我们的“平台”提供SAML服务提供商功能,我们有一些客户提供自己的SAML IDP和身份存储。我们还有其他客户使用不同的单点登录技术,例如oAuth、OpenID或第三方Web服务。一些客户使用这些技术的组合。 代理的目标是标准化和降低每个客户在平台上的SSO集成的复杂性。目前,我们需要定制平台和客户网站之

  • 我使用放心框架的Apigee代理URL与生成承载令牌在飞行,Xapi密钥和使用Apigee代理URL。目前,令牌是使用CURL命令手动生成的。我在邮递员方面可以考得很好。//accessToken,下面的apiKey定义为字符串//inputrequest.getInputStream()读取body所需的JSON 我得到的是401(未经授权的错误),而不是200。我在这里的问题总结一下-- Re

  • 是否可以像在服务器端所做的那样,向ResteasyClient(代理框架)注册DynamicFeature? 所以类似这样的东西: 其中MyDynamicFeature实现 下面的一些文章似乎解释了一些非常相似的事情,但这似乎不适用于ClientResponseFilter/ResteAsyClient: 通过Resteasy上的NameBinding匹配特定方法的筛选器 Resteasy 3.x

  • 您好,我已经将Webdriver manager从4.3.1升级到5.2.1,然后我的代码就不起作用了。 这是代码:WebDriverManager.chromedriver(). config(). setChromeDriverVersion(driverVersion); driverFile=new File(Global.WINDOWS_USER_HOME"\. cache\seleni

  • 代理用于帮助云联壹云平台访问由于网络或其它问题无法直接访问的云平台。 代理用于帮助 云联壹云 平台访问由于网络或其它问题无法直接访问的云平台。 使用场景: Google Cloud需要设置代理才能访问; 天翼云需要提前把访问的公网IP加入白名单才可以直接访问。 其他情况,如 云联壹云 部署在内网环境,需要通过代理访问外网的公有云平台等。 代理使用规则: 当云账号不设置代理时,代表直连网络; 当请求