AndJump --- Android进阶,注解在Activity与Fragment之间传值

原创 2016年07月14日 18:28:07
    最近在做一个新项目,做了很多改变,用了比较多的新东西,比如dagger2,rxjava等等。
    这也有段时间没写博客了。时间稍微空闲了一点,正好花一点时间将最近项目写的一点东西和大家分享一下。
    项目架构搭建完之后,发现这个项目用到注解的地方真的挺多的。但是对于注解的理解一直浮于表面,这对把控整个项目的架构来说,无疑是有点危险的。
    所以,花了几天的时间去深入了解下注解,分析了一下dagger2,eventbus,ButterKnife等框架对注解的使用,体会颇深。
    然后自己也尝试着写了一个注解库,深入学习。

AndJump

    这是注解库的名字,取名的意思是:android jump。
    顾名思义,这是一个关于android 的跳转的库。

    而在androind中跳转表示这什么呢,一般的理解就是activity和fragment之间的跳转,以及传值了。

    所以,这个库的作用就是用来进行activity和fragment之间跳转,传值了。

1.跳转方式比较

好了,废话不多说,现在就来进行一下这个库的具体功能的描述

首先是关于activity的跳转,一般我们使用的是如下方式:

 Intenti=new Intent(this,MainActivity.class); 

 startActivity(i);

那么在AndJump中,则是这样的:

 @QtInject 
 public class MainActivity{

 }
 public class TestActivity{
     ...
                 QtMainActivity.getInstance().start(this);

 }  

咋看之下,你会觉得,你这明显变得麻烦多了啊,原本我只要写两行代码,缩减一下也就是一行代码的。但是按照你这个库来写的话,我还的在两个地方写。简直多此一举。而且,你这个库还用了注解,不知道注解是很消耗性能的么!

诸位别急,咱继续往下看。

2.传值方式的比较

首先,正常的传值方式的话,在activity中我们是这样做的:

public class TestActivity ...{ 
....
 Intenti=new Intent(this,MainActivity.class);
    Bundle bundle = new Bundle();
    bundle.putInt("int", 1);
    bundle.putString("string", "sss");
    i.putExtra("Bundle", bundle);
     startActivity(i);
 }


public class MainActivity{  
    onCreat(Bundle bundle){             
     Bundle  b=getIntent().getBundleExtra("Bndle");
     int j=bundle.getInt("int",0);
      String  s=bundle.getString("string","");      
    }
}

而在AndJump中,则是这样的:

 public class MainActivity extends Activity{
        @QtInject
        int i;
        @QtInject
        String s;
        onCreate(Bundle bundel){
            QtMainActivity.inject(this);
        }
 }
 public class TestActivity extends Activity{
    .....
        QtMainActivity.getInstance().setI(1).setS("sss").start(this);

 }  

ok,现在,再来比较一下,我们可以发现,传统的传值方式需要写部分重复的代码(随着传递的数据变多,代码会显得更加麻烦),

作为一个偷懒的程序员,我们可能会写各种各样的XXXUtil来完成这些重复的操作。

但是,不管如何,我们大都是需要手动去传递一个值,同时要手动去接受,这就显得很是麻烦了。

同时,随着这些繁琐的操作变多,整个类也会变得臃肿,而且也容易出错(比如说KEY值写出,当然,一般会写一些常量,这同样也会使类变得复杂,同时我们还要使后面的人也熟悉这些常量,所以一般还会写各种注释,想想就觉得恐怖)

但是在AndJump中,这其中很多问题是不用我们去考虑的,比如我们可以从上面的代码看到,我们在TestActivity中给MainActivity传递了两个数值,但是,在MainActivity中确只是多了一行代码:

    QtMainActivity.inject(this);

这一切,显得要简单的多了,同时,一旦我们觉得需要新增一个值或多个值,我们都不需要去手动赋值,我们只需要在你需要传递的值前添加一个注解

  @QtInject
  Object o;

这样,在携带数据的地方也只要添加几个字符:

    QtMainActivity.getInstance().setO(o).start(context);

3.关于效率问题

对于注解库来说,大家可能更关心的是他的运行效率,如果一个库的运行效率带来的价值无法让你觉得可以抵消重复写多余代码的麻烦,那么,这个库,想必是拒绝的。

因为大家都知道,注解,是消耗性能的。这也是很多人为什么不使用注解库的原因。

但是,最近一两年来,我们可以发现,注解库在悄悄地流行起来,比如大家熟悉的dagger2,以及谷歌推出的databinding。

这里面都使用了大量的注解。

这里为什么单单提出这两个库呢,因为,这两个库虽然使用了注解,但是,他们使用的是编译时注解。

也就是说,对于应用运行时的效率影响,是微乎其微的。

当然,如果说影响肯定还是用的,不过,我指的是编译时,如果编译的效率多加了几秒也算的话(这个没具体测过,不过android studio 本来就这样。。。)

闲话说到这,再转到AndJump身上,同样的,AndJump只使用了编译时注解,所以,对于效率的影响,可以说是和dagger2等是差不多的。

而且,AndJump的库,相对于eventbus来说,很小很小,实际的代码应该是不到1kb吧。

所以,如果你觉得这些多余的操作可以省略的话,不妨考虑下andJump吧~~

4.如何使用

随着android studio的深入,大家肯定更习惯compile来关联第三方库了,同样,AndJump也是如此
使用方法:

全局Gradle  

 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'  (修改成当前apt版本)


项目gradle:  

 compile 'com.qt:andjump-api:0.2'
 apt  'com.qt:andjump-compiler:0.2'

最后,附上Demo地址,点击下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Activity以singleTask模式启动,intent传值的解决办法

因为项目中,有一个消息推送的功能,每次推送一个消息,就会开启FunctionActivity,那么为了避免重复开启它,在退后的时候,多次出现该Activity,就将该Activity的启动模式变为si...

Android中ViewPager + Fragment使用ButterKnife注解时出现空指针NullPoint的情况

一、如题。当Fragment超过3个时,包括3个,这种情况下使用Butterknife注解有时候会出现空指针。原因如下:在onCreateView里面进行绑定后,如果连续滑动,ViewPager会移除...

反射+注解完美解决Android繁琐的byId和click

Android小白,你还在使用findViewById吗?还在setOnClickListener等等。如果你用过butterknife的话,是不是觉得非常方便,有木有?那么问题来了,为啥别人可以写,...

Android自定义控件-AddView

package view;import android.annotation.SuppressLint; import android.content.Context; import androi...

RxBinding的一些简单使用

前言:RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava的 Binding API。所谓 Binding,就是类似设置 OnCl...

Android中fragment之间和Activity的传值、切换

功能介绍:通过一个activity下方的三个按钮,分别是发送消息(sendButton)、聊天记录(chatButton)、常用语(commonButton)。当单击按钮是,来切换上方的fragmen...
  • killcwd
  • killcwd
  • 2014年12月19日 09:32
  • 1164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AndJump --- Android进阶,注解在Activity与Fragment之间传值
举报原因:
原因补充:

(最多只允许输入30个字)