这是一个系列,咱们将其命名为android最佳实践,若是你尚未看以前的文章:android
android最佳实践(二)github
android最佳实践(三)segmentfault
上一节,咱们编写了contact模块,该模块可以很方便的使用联系人和自定义联系人界面,春节事后,我编写了基于okhttp模块,发现gradle的编译仍然巨慢,那么就先解决gradle的编译问题吧。app
若是你不知道什么事daemon,能够参考个人Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ),你须要作的是在gradle.properties文件中加入:框架
org.gradle.daemon=true
适用场景是当你的app有多个模块的时候,默认状况是setting.gradle中的模块依次编译,速度缓慢,咱们须要开启多线程:ide
org.gradle.parallel=true
当你打开了这些配置,依然以为很慢,你是否想过即时运行gradle
开启即时运行的前提是,你的Android studio版本基于Android2.0以上,那么升级为Android2.0后,你须要进行哪些操做呢。
首先:
update你的工程,会修改你的gradle文件:
classpath 'com.android.tools.build:gradle:2.0.0-beta4'
这时候,有人会问我,如何升级到Android2.0,在此我就不介绍了,直接上连接http://tools.android.com/download/studio/builds/2-0-beta-4
即时运行有多强大,给你一个图,本身感觉下:
如何运行:
so easy,初始的使用直接运行,当修改代码后再次运行便可。
这又是神马,当你debug的时候,是否以为每次开启debug都很慢?那么咱们可否在你打开app以后进入某个页面以前,再进入debug模式呢,答案是确定的,那么如何操做呢,给大家个图,本身找吧,倒数第二个:
缺点:记得在你修改完代码后,再次运行app,不然debug的代码仍然是你修改以前的代码。
记得我有一篇博文讲解Android6.0的权限问题,那么在此说一下,当咱们的app运行在api23如下的时候,权限一切正常,当在23之后,会报错。contact中的权限涉及到READ_CONTACTS和WRITE_CONTACTS,而它们都是Dangerous permissions,即咱们须要在运行的时候判断是否开启权限,API23以上其默认是不会弹出权限对话框,因此当咱们不加以判断的话,会报错。
具体如何判断呢:
ActivityCompat.requestPermissions(mActivity, PERMISSIONS_CONTACT, REQUEST_CONTACTS);
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
主要涉及到以上2个方法,固然fragment会有所不一样,具体代码编写,能够参照github上的contact模块,https://github.com/neuyu。
android 6.0的权限问题确实给开发者带来了开发难度,那么如何下降难度呢,在此向你们介绍PermissionsDispatcher框架,若是你使用过greenDAO,那么使用PermissionsDispatcher将会很简单,也很容易理解其原理,具体如何使用在此不介绍。
基于注解,且无反射,你须要在你的activity或者fragment类上定义@RuntimePermissions,而后你须要在你的方法上定义@NeedsPermission
而后更新你的项目,其会为你自动生成类。
你要作的事委托给生成的类:
MainActivityPermissionsDispatcher.showCameraWithCheck(this);
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // NOTE: delegate the permission handling to generated method MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults); }
详细的说明,以及使用指南和代码检视,可在以后的博文中讲解。