我敢肯定你对这个标题肯定心存疑惑,但事实就是如此,这个标题完全适合Android开发人员。据我所知, Android程序员不情愿写 findViewById()、点击事件监听等重复率较高的代码。那我们如何才能缩短编写业务逻辑代码的时间,并且避免写那些重复的代码呢?所以让我们来成为一个能偷懒又有高效率的Android程序员。想知道怎么做吗?不用急,接下来我就会写到。

有许多第三方的库、框架和解决方案可供我们使用。出于种种原因,我们并不知道这些库或者知道但还没用过。有的开发者开发了自己定义的库或者并不想使用第三方的库。如果我们在应用程序开发的过程中使用一些第三方库,也许可以提高程序的可兼容性、漂亮的UI界面、让代码变得整洁等等。;另外,在Android应用开发过程中,我们不可能有过多的精力和时间去研究应用安全这块,要学会借力!所以最好的办法就是借助第三方平台的解决方案,这样既可以节省下很多时间又可以保证应用的安全,偷懒又高效,两全其美!

下面,让我们来讨论下“依赖注入函数库”。

什么是依赖注入?

依赖注入是一种软件设计模式,无论是在运行时还是在编译时,允许删除、改变硬编码依赖性。[来自Wikipedia](维基百科资源):

一些常用和普遍的依赖注入库有:

RoboGuice:

Roboguice是一个用于Android应用的依赖注入框架,使用Google官方的Guice库位极大地简化了Android的依赖注入。让你的Android应用开发之路更加平坦顺利,编程更加简单有趣。

当你调用 getIntent(),getExtras()这些函数时你是否经常忘记检查是否为Null?RoboGuice可以帮助你。初始化TextView有必要调用findViewById()吗?不用,RoboGuice已经为你完成了。

通过使用RoboGuice,你可以注入View视图控件、资源、系统服务或者其他任何对象。RoboGuice能帮你精简应用程序的代码。代码越少意味着出现问题或bug的次数也就越少,从而可以把更多的精力花在项目中那些需要编写或修改的部分,使得阅读代码更加容易。

让我们来看看各种RoboGuice 库的使用方法。

使用RoboGuice库 :

  • 控件注入:用@InjectViews方法初始化控件,例如:@InjectView(R.id.textview1)TextView textView1。
  • 资源注入:用@InjectResources方法初始化资源,例如:@InjectResource(R.string.app_name)String name。
  • 系统服务注入:用@Inject方法初始化并获取系统服务,例如:@Inject LayoutInflater inflater。
  • POJO对象注入:用@Inject方法注入并初始化POJO对象,例如:@Inject Foo foo。

安装

要使用RoboGuice,你需要下载JAR文件并把他们添加到环境变量中:

我们来看看一个简单的一般事件代码:

实例

<span style="font-family:Arial;font-size:14px;"><span style="font-size:14px;">public class TestActivity extends Activity{

    TextView textView1;
TextView textView2;
ImageView imageView1;
String name;
Drawable icLauncher;
LocationManager locManager;
LayoutInflater inflater;
NotificationManager notifyManager; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_test);
textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
imageView1 = (ImageView) findViewById(R.id.imageView1);
name = getString(R.string.app_name);
icLauncher = getResources().getDrawable(R.id.ic_launcher);
locManager = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
notifyManager = (NotificationManager) getSystemService(Activity.NOTIFICATION_SERVICE);
textView1.setText("Hello World! RoboGuice demo");
}
}</span></span>

再看看使用RoboGuice精简代码后神奇之处。

使用RoboGuice

你先要继承RoboActivity或者RoboFragment,才能使用RoboGuice的依赖注入功能。

<span style="font-family:Arial;font-size:14px;"><span style="font-size:14px;">public class TestActivity extends RoboActivity{

    @InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@Inject LocationManager locManager;
@Inject LayoutInflater inflater;
@Inject NotificationManager notifyManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_test);
textView1.setText(name);
}
}</span></span>

这么一对比,我想你肯定明白了为什么要使用RoboGuice?再来看看有哪些好处:

使用RoboGuice的好处

  • 不需要初始化控件,如有需要就用@InjectViews。
  • 不需要初始化系统服务,如有需要就用@Inject。
  • 不需要初始化像Drawable,string以及其他的资源,如有需要就用@InjectResource。
  • 以上实践能帮助你精简代码。
  • 越少的代码,越少的问题和bugs。
  • 少量的代码让Android开发人员省力同时,也让他们能更专注于实际的业务逻辑。

RoboGuice和ActionBarSherlock

正如我前面提到的,你得在RoboActivity和RoboFragment中继承其中一个才能在Activity事件或Fragment中使用RoboGuice。但是如果你已经在项目中使用了ActionBarSherlock去编译呢?那问题就在于,你已经继承了SherlockActivity或SherlockFragmentActivity中的一个。现在问题是,你不能同时使用RoboGuice和ActionBarSherlock。

解决方法是,为Activities和Fragments定义一个基类。然后你就能同时使用RoboGuice和ActionBarSherlock了。可以借此了解下反编译解决方案

你可以在这里下载一些基类:
https://github.com/rtyley/roboguice-sherlock或者下载JAR包也是一样:RoboGuice+Sherlock.jar,你可以任选一个添加到你的项目。

如何成为一个偷懒又高效的Android开发人员的更多相关文章

  1. 成为一个高效的web开发人员,只需要三步

    想成为一名专业的web开发人员并不像你想象的那么容易,开发人员在开发自己的web项目时常常需要牢记很多东西,他们要不断寻找新理念,新创意,在特定时间内开发出高质量的产品,一名优秀的程序员必须明白时间的 ...

  2. 50个Android开发人员必备UI效果源码[转载]

    50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面 ...

  3. Android开发人员必知的开发资源

    developer.android.com 官方开发人员网站推荐资源 在动手编写第一个 Android 应用之前,用心读一读 Android Design 章节.尤其是以下的这些文章: Devices ...

  4. 给 Android 开发人员的 RxJava 具体解释

    鉴于 RxJava 眼下这样的既火爆又神奇的现状,而我又在一年的使用过程中对 RxJava 有了一些理解,我决定写下这篇文章来对 RxJava 做一个相对具体的.针对 Android 开发人员的介绍. ...

  5. Android开发人员必须掌握的10 个开发工具+应该深入学习的10个开源应用项目

    一.Android开发人员必须掌握的10 个开发工具 Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. ...

  6. Android 开发人员必须掌握的 10 个开发工具

    Android 开发人员必须掌握的 10 个开发工具 Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. ...

  7. 为Android开发人员定制的搜索引擎

    我在谷歌上定制了一个专门针对Android开发人员的搜索引擎.载入慢的童鞋考虑FanQiang吧,作为技术人员使用Google才是王道. 在此推荐给大家:cx=01590883735180208228 ...

  8. Android开发人员应该知道的Kotlin

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2016/01/kotlin-android Android开发人员在语言限制方面面临着 ...

  9. 作为一个程序员怎么通过android开发赚钱

    ​ 上面是一个程序员通过Android开发每天的收入,信则有! 自己学安卓差不多,有一年了.我本来是从事javaweb开发的,可能学习安卓上手会快点.其实安卓没有那难 .首先开发安卓程序,要有一个,开 ...

随机推荐

  1. MyEclipse 设置JSP,HTML的默认打开方式,避免出现打开后上面出现浏览器

    1. 2. 3. jsp的设置一样,这样myeclipse打开jsp就不会出现上面的浏览器了

  2. Spring中的InitializingBean接口

    InitializingBean接口为bean提供了初始化方法的方式,它只有afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法. 测试程序如下: impo ...

  3. Java String.replaceAll()方法

    声明  以下是java.lang.String.replaceAll()方法的声明 public String replaceAll(String regex, String replacement) ...

  4. COGS——T 1175. [顾研NOIP] 旅游电车

    http://www.cogs.pro/cogs/problem/problem.php?pid=1175 ★★☆   输入文件:buss.in   输出文件:buss.out   简单对比时间限制: ...

  5. 混合高斯模型的EM求解(Mixtures of Gaussians)及Python实现源代码

    今天为大家带来混合高斯模型的EM推导求解过程. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVhbnl1YW5zZW4=/font/5a6L5L2T/ ...

  6. How to get the MouseEvent coordinates for an element that has CSS3 Transform?

    I want to detect where a MouseEvent has occurred, in coordinates relative to the clicked element. Wh ...

  7. dom 编程(html和xml)

    html dom与xml dom关系: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...

  8. javascript系列-class10.DOM(下)

    1.node节点(更详细的获取(设置)页面中所有的内容)         根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:   元素是节点的别称,节点包含元素当然节点还有 ...

  9. SpringMVC(一) 简单代码编写,注解,重定向与转发

    SpringMVC是什么 SpringMVC是目前最好的实现MVC设计模式的框架,是Spring框架的一个分支产品,以SpringIOC容器为基础,并利用容器的特性来简化它的配置.SpringMVC相 ...

  10. 51nod 1572 宝岛地图 (预处理四个方向的最大步数优化时间,时间复杂度O(n*m+k))

    题目: 这题如果没有时间限制的话暴力可以解,暴力的话时间复杂度大概是O(k*n),1s的话非常悬. 所以我们需要换个思路,我们对每个点预处理四个方向最多能走的步数,这个预处理时间复杂度是O(n*m). ...