這是國外的一個大神(http://blog.danlew.net/about/)總結的,被國內(http://androidperformance.com/)一個大神翻譯了,我只是大天然的搬運工,由於那邊是一期一期的,我在此匯個總,方便你們預覽,我也會即時不按期更新,走着~html
Activity.startActivities() 經常使用於在應用程序中間啓動其餘的Activity.java
TextUtils.isEmpty() 簡單的工具類,用於檢測是否爲空android
Html.fromHtml() 用於生成一個Html,參數能夠是一個字符串.我的認爲它不是很快,因此我不怎麼常常去用.(我說不常常用它是爲了重點突出這句話:請多手動構建 Spannable 來替換 Html.fromHtml),可是它對渲染從 web 上獲取的文字仍是很不錯的。git
TextView.setError() 在驗證用戶輸入的時候很棒github
Build.VERSION_CODES 這個標明瞭當前的版本號,在處理兼容性問題的時候常常會用到.點進去能夠看到各個版本的不一樣特性web
Log.getStackTraceString() 方便的日誌類工具,方法Log.v()、Log.d()、Log.i()、Log.w()和Log.e()都是將信息打印到LogCat中,有時候須要將出錯的信息插入到數據庫或一個自定義的日誌文件中,那麼這種狀況就須要將出錯的信息以字符串的形式返回來,也就是使用static String getStackTraceString(Throwable tr)方法的時候.sql
LayoutInflater.from() 顧名思義,用於Inflate一個layout,參數是layout的id.這個常常寫Adapter的人會用的比較多.數據庫
ViewConfiguration.getScaledTouchSlop() 使用 ViewConfiguration 中提供的值以保證全部觸摸的交互都是統一的。這個方法獲取的值表示:用戶的手滑動這個距離後,才斷定爲正在進行滑動.固然這個值也能夠本身來決定.可是爲了一致性,仍是使用標準的值較好.canvas
PhoneNumberUtils.convertKeypadLettersToDigits 顧名思義.將字母轉換爲數字,相似於T9輸入法,緩存
Context.getCacheDir() 獲取緩存數據文件夾的路徑,很簡單可是知道的人很少,這個路徑一般在SD卡上(這裏的SD卡指的是廣義上的SD卡,包括外部存儲和內部存儲)Adnroid/data/您的應用程序包名/cache/ 下面.測試的時候,能夠去這裏面看是否緩存成功.緩存在這裏的好處是:不用本身再去手動建立文件夾,不用擔憂用戶把本身建立的文件夾刪掉,在應用程序卸載的時候,這裏會被清空,使用第三方的清理工具的時候,這裏也會被清空.
ArgbEvaluator 用於處理顏色的漸變。就像 Chris Banes 說的同樣,這個類會進行不少自動裝箱的操做,因此最好仍是去掉它的邏輯本身去實現它。這個沒用過,不明其因此然,回頭再補充.
ContextThemeWrapper 方便在運行的時候修改主題.
Space space是Android 4.0中新增的一個控件,它實際上能夠用來分隔不一樣的控件,其中造成一個空白的區域.這是一個輕量級的視圖組件,它能夠跳過Draw,對於須要佔位符的任何場景來講都是很棒的。
ValueAnimator.reverse() 這個方法能夠很順利地取消正在運行的動畫.我超喜歡.
DateUtils.formatDateTime() 用來進行區域格式化工做,輸出格式化和本地化的時間或者日期.
AlarmManager.setInexactRepeating 經過鬧鈴分組的方式省電,即便你只調用了一個鬧鐘,這也是一個好的選擇,(能夠確保在使用完畢時自動調用 AlarmManager.cancel ()。原文說的比較抽象,這裏詳細說一下:setInexactRepeating指的是設置非準確鬧鐘,使用方法:alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent),非準確鬧鐘只能保證大體的時間間隔,可是不必定準確,可能出現設置間隔爲30分鐘,可是實際上一次間隔20分鐘,另外一次間隔40分鐘。它的最大的好處是能夠合併鬧鐘事件,好比間隔設置每30分鐘一次,不喚醒休眠,在休眠8小時後已經積累了16個鬧鐘事件,而在手機被喚醒的時候,非準時鬧鐘能夠把16個事件合併爲一個, 因此這麼看來,非準時鬧鐘通常來講比較節約能源.
Formatter.formatFileSize() 一個區域化的文件大小格式化工具。通俗來講就是把大小轉換爲MB,G,KB之類的字符串.
ActionBar.hide().show() 顧名思義,隱藏和顯示ActionBar,能夠優雅地在全屏和帶Actionbar之間轉換.
Linkify.addLinks() 在Text上添加連接.很實用.
StaticLayout 在自定義 View 中渲染文字的時候很實用。
Activity.onBackPressed() 很方便的管理back鍵的方法,有時候須要本身控制返回鍵的事件的時候,能夠重寫一下.好比加入 「點兩下back鍵退出」 功能.
GestureDetector 用來監聽和相應對應的手勢事件,好比點擊,長按,慢滑動,快滑動,用起來很簡單,比你本身實現要方便許多.
DrawFilter 可讓你在不調用onDrew方法的狀況下,操做canvas,比了個如,你能夠在建立自定義 View 的時候設置一個 DrawFilter,給父 View 裏面的全部 View 設置反別名。
ActivityManager.getMemoryClass() 告訴你你的機器還有多少內存,在計算緩存大小的時候會比較有用.
ViewStub 它是一個初始化不作任何事情的 View,可是以後能夠載入一個佈局文件。在慢加載 View 中很適合作佔位符。惟一的缺點就是不支持標籤,因此若是你不過小心的話,可能會在視圖結構中加入不須要的嵌套。
SystemClock.sleep() 這個方法在保證必定時間的 sleep 時很方便,一般我用來進行 debug 和模擬網絡延時。
DisplayMetrics.density 這個方法你能夠獲取設備像素密度,大部分時候最好讓系統來自動進行縮放資源之類的操做,可是有時候控制的效果會更好一些.(尤爲是在自定義View的時候).
Pair.create() 方便構建類和構造器的方法。
UrlQuerySanitizer——使用這個工具能夠方便對 URL 進行檢查。
Fragment.setArguments——由於在構建 Fragment 的時候不能加參數,因此這是個很好的東西,能夠在建立 Fragment 以前設置參數(即便在 configuration 改變的時候仍然會致使銷燬/重建)。
DialogFragment.setShowsDialog ()—— 這是一個很巧妙的方式,DialogFragment 能夠做爲正常的 Fragment 顯示!這裏可讓 Fragment 承擔雙重任務。我一般在建立 Fragment 的時候把 onCreateView ()和 onCreateDialog ()都加上,就能夠建立一個具備雙重目的的 Fragment。
FragmentManager.enableDebugLogging ()——在須要觀察 Fragment 狀態的時候會有幫助。
LocalBroadcastManager——這個會比全局的 broadcast 更加安全,簡單,快速。像 otto 這樣的 Event buses 機制對你的應用場景更加有用。
PhoneNumberUtils.formatNumber ()——顧名思義,這是對數字進行格式化操做的時候用的。
Region.op()——我發如今對比兩個渲染以前的區域的時候很實用,若是你有兩條路徑,那麼怎麼知道它們是否是會重疊呢?使用這個方法就能夠作到。
Application.registerActivityLifecycleCallbacks——雖然缺乏官方文檔解釋,不過我想它就是註冊 Activity 的生命週期的一些回調方法(顧名思義),就是一個方便的工具。
versionNameSuffix——這個 gradle 設置可讓你在基於不一樣構建類型的 manifest 中修改版本名這個屬性,例如,若是須要在在 debug 版本中以」-SNAPSHOT」結尾,那麼就能夠輕鬆的看出當前是 debug 版仍是 release 版。
CursorJoiner——若是你是隻使用一個數據庫的話,使用 SQL 中的 join 就能夠了,可是若是收到的數據是來自兩個獨立的 ContentProvider,那麼 CursorJoiner 就很實用了。
Genymotion——一個很是快的 Android 模擬器,本人一直在用。
-nodpi——在沒有特別定義的狀況下,不少修飾符(-mdpi,-hdpi,-xdpi等等)都會默認自動縮放 assets/dimensions,有時候咱們須要保持顯示一致,這種狀況下就可使用 -nodpi。
BroadcastRecevier.setDebugUnregister ()——又一個方便的調試工具。
Activity.recreate ()——強制讓 Activity 重建。
PackageManager.checkSignatures ()——若是同時安裝了兩個 app 的話,能夠用這個方法檢查。若是不進行簽名檢查的話,其餘人能夠輕易經過使用同樣的包名來模仿你的 app。
Activity.isChangingConfigurations ()——若是在 Activity 中 configuration 會常常改變的話,使用這個方法就能夠不用手動作保存狀態的工做了。
SearchRecentSuggestionsProvider——能夠建立最近提示效果的 provider,是一個簡單快速的方法。
ViewTreeObserver——這是一個很棒的工具。能夠進入到 VIew 裏面,並監控 View 結構的各類狀態,一般我都用來作 View 的測量操做(自定義視圖中常常用到)。
org.gradle.daemon=true——這句話能夠幫助減小 Gradle 構建的時間,僅在命令行編譯的時候用到,由於 Android Studio 已經這樣使用了。
DatabaseUtils——一個包含各類數據庫操做的使用工具。
android:weightSum (LinearLayout)——若是想使用 layout weights,可是卻不想填充整個 LinearLayout 的話,就能夠用 weightSum 來定義總的 weight 大小。
android:duplicateParentState (View)——此方法可使得子 View 能夠複製父 View 的狀態。好比若是一個 ViewGroup 是可點擊的,那麼能夠用這個方法在它被點擊的時候讓它的子 View 都改變狀態。
android:clipChildren (ViewGroup)——若是此屬性設置爲不可用,那麼 ViewGroup 的子 View 在繪製的時候會超出它的範圍,在作動畫的時候須要用到。
android:fillViewport (ScrollView)——在這片文章中有詳細介紹文章連接,能夠解決在 ScrollView 中當內容不足的時候填不滿屏幕的問題。
android:tileMode (BitmapDrawable)——能夠指定圖片使用重複填充的模式。
android:enterFadeDuration/android:exitFadeDuration (Drawables)——此屬性在 Drawable 具備多種狀態的時候,能夠定義它展現前的淡入淡出效果。
android:scaleType (ImageView)——定義在 ImageView 中怎麼縮放/剪裁圖片,通常用的比較多的是「centerCrop」和「centerInside」。
Merge——此標籤能夠在另外一個佈局文件中包含別的佈局文件,而不用再新建一個 ViewGroup,對於自定義 ViewGroup 的時候也須要用到;能夠經過載入一個帶有標籤的佈局文件來自動定義它的子部件。
AtomicFile——經過使用備份文件進行文件的原子化操做。這個知識點以前我也寫過,不過最好仍是有出一個官方的版本比較好。
ViewDragHelper ——視圖拖動是一個比較複雜的問題。這個類能夠幫助解決很多問題。若是你須要一個例子,DrawerLayout就是利用它實現掃滑。Flavient Laurent 還寫了一些關於這方面的優秀文章。
PopupWindow——Android處處都在使用PopupWindow ,甚至你都沒有意識到(標題導航條ActionBar,自動補全AutoComplete,編輯框錯誤提醒Edittext Errors)。這個類是建立浮層內容的主要方法。
Actionbar.getThemrContext()——導航欄的主題化是很複雜的(不一樣於Activity其餘部分的主題化)。你能夠獲得一個上下文(Context),用這個上下文建立的自定義組件能夠獲得正確的主題。
ThumbnailUtils——幫助建立縮略圖。一般我都是用現有的圖片加載庫(好比,Picasso 或者 Volley),不過這個ThumbnaiUtils能夠建立視頻縮略圖。譯者注:該API從V8纔開始支持。
Context.getExternalFilesDir()———— 申請了SD卡寫權限後,你能夠在SD的任何地方寫數據,把你的數據寫在設計好的合適位置會更加有禮貌。這樣數據能夠及時被清理,也會有更好的用戶體驗。此外,Android 4.0 Kitkat中在這個文件夾下寫數據是不須要權限的,每一個用戶有本身的獨立的數據存儲路徑。譯者注:該API從V8纔開始支持。
SparseArray——Map的高效優化版本。推薦瞭解姐妹類SparseBooleanArray、SparseIntArray和SparseLongArray。
PackageManager.setComponentEnabledSetting()——能夠用來啓動或者禁用程序清單中的組件。對於關閉不須要的功能組件是很是讚的,好比關掉一個當前不用的廣播接收器。
SQLiteDatabase.yieldIfContendedSafely()——讓你暫時中止一個數據庫事務, 這樣你能夠就不會佔用太多的系統資源。
Environment.getExternalStoragePublicDirectory()——仍是那句話,用戶指望在SD卡上獲得統一的用戶體驗。用這個方法能夠得到在用戶設備上放置指定類型文件(音樂、圖片等)的正確目錄。
View.generateViewId()——每次我都想要推薦動態生成控件的ID。須要注意的是,不要和已經存在的控件ID或者其餘已經生成的控件ID重複。
ActivityManager.clearApplicationUserData()—— 一鍵清理你的app產生的用戶數據,多是作用戶退出登陸功能,有史以來最簡單的方式了。
Context.createConfigurationContext() ——自定義你的配置環境信息。我一般會遇到這樣的問題:強制讓一部分顯示在某個特定的環境下(倒不是我一直這樣瞎整,說來話長,你很難理解)。用這個實現起來能夠稍微簡單一點。
ActivityOptions ——方便的定義兩個Activity切換的動畫。 使用ActivityOptionsCompat 能夠很好解決舊版本的兼容問題。
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()——僅僅由於很好玩,沒有其餘緣由。在整個安卓開源項目中(AOSP the Android ——pen Source Project Android開放源代碼項目)中還有其餘頗有意思的東西(好比
GRAVITY_DEATH_STAR_I。不過,都不像這個這樣,這個確實有用
ViewParent.requestDisallowInterceptTouchEvent() ——Android系統觸摸事件機制大多時候可以默認處理,不過有時候你須要使用這個方法來剝奪父級控件的控制權(順便說一下,若是你想對Android觸摸機制瞭解更多,這個演講會令你驚歎不已。)