博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AndroidAnnnotations注入框架的工作原理(二)
阅读量:6222 次
发布时间:2019-06-21

本文共 2061 字,大约阅读时间需要 6 分钟。

hot3.png

(一):基本介绍(Overview)

AndroidAnnotations使用很简单的方式进行工作,它会使用Java标准的APT(Annotation Processing Tool)自动添加额外的编译步骤在原生源代码。

对于每一个增强(注入)的Class.例如每一个使用@EActivity注入过的Activity,它都会生成一个使用该相同Activity 的名称后边加上一个下划线结尾的子类Activity。

package com.some.company;

@EActivity
public class MyActivity extends Activity {
  // ...
}

会在相同的包但另外一个源代码文件夹中生成如下的子类

package com.some.company;

public final class MyActivity_ extends MyActivity {
// ...
}

 

这个子类会通过覆盖一些方法(例如:onCreate())给你的Activity来添加相应的行为方法,然后进行委托给父类进行调用。这就是我们的Activity的配置:

<activity android:name=".MyListActivity_" />

 

(二):打开一个被注入过的Activity

在Android中,我们平时会通过以下这种方式来打来Activity:

startActivity(this, MyListActivity.class);

然而,如果我们使用AndroidAnnotations,那么真正需要被启动的Activity就变成了MyListActivity_

startActivity(this, MyListActivity_.class);

 

(三):意图构建(Intent Builder)

3.1 AndroidAnnotations已经提供一些静态的方法来让我们生成打开Activity

    1.打开Activity

        MyListActivity_.intent(context).start();

    2.通过Activity来获取Intent

        Intent intent = MyListActivity_.intent(context).get();

    3.可以设置flags

        MyListActivity_.intent(context).flags(FLAG_ACTIVITY_CLEAR_TOP).start();

    4.可以设置额外的数据

        MyListActivity_.intent(context).myDateExtra(someDate).start();

    5.可以使用等效的startActivityForResult()方法

        MyListActivity_.intent(context).startForResult(REQUEST_CODE);

   请注意如下:你可以使用@OnActivityResult注解来进行获取返回值和额外的参数值数据

    @OnActivityResult(REQUEST_CODE)

        void onResult(int resultCode) {
    }

    3.2 可以使用意图构建器来传递可选的bundle参数数据

        MyListActivity_.intent(context).withOptions(bundle).start();

    3.3 使用意图构建起可以进行添加Activity打开的过渡动画

        MyListActivity_.intent(context).start().withAnimation(enterAnimRes, exitAnimRes));

    3.4 框架已经提供静态放来而让我们进行打开serice

        3.4.1 Starting the service

                MyService_.intent(context).start();

        3.4.2 Building an intent from the activity

             Intent intent = MyService_.intent(context).build();
        3.4.3 You can provide flags
             MyService_.intent(context).flags(Intent.FLAG_GRANT_READ_URI_PERMISSION).start();

(四):打开一个被注入过的Service

    在Android中我们通常会通过如下的方法来开启一个service

    startService(this, MyService.class);

    然而使用AndroidAnnotations框架之后,真正被启动的Service必须为MyService_。

    startService(this, MyService_.class);

转载于:https://my.oschina.net/u/2933456/blog/755190

你可能感兴趣的文章
JS事件循环EventLoop初探
查看>>
Mac开发环境配置
查看>>
Telegram源码之安卓客户端配置
查看>>
Java精讲:生产者-消费者
查看>>
磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序
查看>>
JS中定时器线程理解
查看>>
记一次PMML文件的处理过程
查看>>
阿里云移动端播放器高级功能---视频下载
查看>>
后端_计算机网络
查看>>
关于大数问题的个人理解
查看>>
每日两道前端面试题 - 20190202
查看>>
用友云开发者中心助你上云系列之在线调试
查看>>
sequelize-cli 使用记录
查看>>
区块链共识协议最详细的分析
查看>>
JS难点之hoist
查看>>
2018的年终总结和2019新目标
查看>>
新近爆出的runC容器逃逸漏洞,用户如何面对?
查看>>
还在用AIDL吗?试试EasyMessenger吧
查看>>
LeetCode 318. Maximum Product of Word Lengths
查看>>
百度PaddlePaddle再获新技能 智能推荐、对话系统、控制领域都能搞定!
查看>>