android最佳实践(五)

这是一个系列,我们将其命名为android最佳实践,如果你还没有看之前的文章:

Android最佳实践(一)

android最佳实践(二)

android最佳实践(三)

android最佳实践(四)

Android最佳实践(六)之扫描二维码模块

上一节,我们编写了contact模块,该模块能够很方便的使用联系人和自定义联系人界面,春节过后,我编写了基于okhttp模块,发现gradle的编译仍然巨慢,那么就先解决gradle的编译问题吧。

加速gradle编译

开启daemon

如果你不知道什么事daemon,可以参考我的Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ),你需要做的是在gradle.properties文件中加入:

org.gradle.daemon=true 

开启多线程编译

适用场景是当你的app有多个模块的时候,默认情况是setting.gradle中的模块依次编译,速度缓慢,我们需要开启多线程:

org.gradle.parallel=true

当你打开了这些配置,依然觉得很慢,你是否想过即时运行

Instant run

开启即时运行的前提是,你的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,初始的使用直接运行,当修改代码后再次运行即可。

Attach debugger to android process

这又是神马,当你debug的时候,是否觉得每次开启debug都很慢?那么我们能否在你打开app之后进入某个页面之前,再进入debug模式呢,答案是肯定的,那么如何操作呢,给你们个图,自己找吧,倒数第二个:
图片描述

缺点:记得在你修改完代码后,再次运行app,否则debug的代码仍然是你修改之前的代码。

contact的android6.0兼容

记得我有一篇博文讲解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

PermissionsDispatcher

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);
}

详细的说明,以及使用指南和代码检视,可在之后的博文中讲解。


neu
最新android特性学习,翻译AndroidHive,google develop大神博客
3.1k 声望
1.2k 粉丝
0 条评论
推荐阅读
Android Studio 2.2新特性
Android studio 2.2的提升包含三大要素:更快,更加智能,Android平台支持。开发更加迅速,例如新的布局编辑器,其让开发者能更快的更简单的编写应用界面。开发更加智能,例如新的APK分析工具,增强了的布局代码...

neu2阅读 7.4k

AS升级3.0,gradle plugin 升级到3.0.0遇到的问题
答:这个是因为Tinker中用到了apkVariantData属性,我们可以将tiner的gradle去除掉。上面是发现tinker有问题,另外发现GrowingIO也有这个问题,如果用的是gradle plugin3.0.0的话也需要去掉,如果还有童鞋有补充的...

WelliJhon阅读 20.9k评论 7

在Android Studio中使用Method trace,查看某进程的所有线程trace的方法
近几天开发的过程中,遇到了一个很棘手的问题:在没网络情况下OKHttp的任何请求,全都没有任何回应。想要查看线程的调用栈查看是哪里stuck了。于是使用了AndroidStudio的工具。Monitors中CPU的Method tracing功能...

ehart1阅读 20.6k评论 2

Android-博客及公众号推荐
首先强烈的推荐 stormzhang的博客,一直在关注他的博客和公众号,对我影响很大,不仅仅是Android学习之路,而且还是还会分享一些Android或者人生的经验,我也是一步步靠自己走过来,还在继续努力中。看stormzhang...

秦子帅2阅读 3.9k

如何用3D流体实现逼真水流效果?
华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。

HMSCore1阅读 2k

AS上传Library到JCenter 教程+踩坑记录
本文使用'com.novoda:bintray-release作为上传插件,下面以我个人的utils library上传为例进行说明:<!--more-->注册bintray账号网址:[链接]注:可通过Github、Google、Twitter授权bintray实现注册创建bin...

风清袖一1阅读 6.8k

Android安全之Https中间人攻击漏洞
HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性。中间人攻击,Man-in-the-middle attack,缩写:MITM,是指攻击者与通讯的两端分别创...

YAQ御安全阅读 5.3k

3.1k 声望
1.2k 粉丝
宣传栏