這是一個系列,咱們將其命名爲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); }
詳細的說明,以及使用指南和代碼檢視,可在以後的博文中講解。