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地址,点击下载

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

Code Fragment-不再建议使用的方法,使用注解说明。

一些方法在新的版本有所改动,不再建议使用,可以使用注解说明 ,并提示用户使用新的方法。 /** * @deprecated Use {@link #setButton(int, CharS...
  • time_hunter
  • time_hunter
  • 2013年07月20日 09:20
  • 1431

Android 如何编写基于编译时注解的项目

本文已在CSDN《程序员》杂志刊登。 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。 转载请标明出处: http://blog.csd...
  • lmj623565791
  • lmj623565791
  • 2016年07月20日 12:09
  • 30511

activity和fragment之间的简单传值

第一种就是在activity中建一个bundle,把要传的值存入bundle,然后通过fragment的setArguments(bundle)传到fragment,在fragment中,用getAr...
  • HuaMnge
  • HuaMnge
  • 2016年11月29日 14:04
  • 3985

Android笔记--简单的Fragment和Activity的之间的数据交互(传值)

通过点击MainActivity里的按钮传一个字符串给MainActivity2的fragment里的textview,并显示出来。 1、在MainActivity下:通过intent先把字符串传给M...
  • weilexuexia
  • weilexuexia
  • 2016年03月12日 10:41
  • 2772

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

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

ButterKnife使用之Activity与Fragment

在Fragment中使用ButterFnife,返回的View为null
  • qq_36220729
  • qq_36220729
  • 2017年03月17日 15:23
  • 5393

Android之---Activity与Fragment之间的传值问题

Activity与Fragment之间的传值问题
  • u010936731
  • u010936731
  • 2017年01月12日 17:26
  • 1689

Activity和Fragment之间相互传值和调用方法

1。Activity—>Fragment用Bundle传值,... BlankFragment fragment = new BlankFragment(); Bund...
  • RichieZhu
  • RichieZhu
  • 2016年03月30日 15:23
  • 2298

Android 如何编写基于编译时注解的项目

一、概述 在Android应用开发中,我们常常为了提升开发效率会选择使用一些基于注解的框架,但是由于反射造成一定运行效率的损耗,所以我们会更青睐于编译时注解的框架,例如: butterknife ...
  • hj7jay
  • hj7jay
  • 2016年07月21日 20:32
  • 1273

Android通过注解初始化View

Android通过注解的方式来初始化View,替代findViewById。几行代码实现最简单注解,提高工作效率。...
  • zhangweiwtmdbf
  • zhangweiwtmdbf
  • 2014年06月12日 14:42
  • 24776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AndJump --- Android进阶,注解在Activity与Fragment之间传值
举报原因:
原因补充:

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