ThumbnailUtils.extractThumbnail(bitmap, width, height); 壓縮圖片到指定大小的方法,之前都是一次次的createbitmap,而後用matrix去縮放,麻煩死了。html
一、Throwable類中的getStackTrace()方法,根據這個方法能夠獲得函數的逐層調用地址,其返回值爲StackTraceElement[];
二、StackTraceElement類,其中四個方法getClassName(),getFileName(),getLineNumber(),getMethodName()在調試程序打印Log時很是有用;
三、UncaughtExceptionHandler接口,再好的代碼異常不免,利用此接口能夠處理未捕獲的異常;
使用參見:Android使用UncaughtExceptionHandler捕獲全局異常
四、Resources類中的getIdentifier(name, defType, defPackage)方法,根據資源名稱獲取其ID,作UI時常常用到;
五、View中的isShown()方法,之前都是用view.getVisibility() == View.VISIBLE來判斷的(╯□╰);
六、Arrays類中的asList(T... array)方法,數組轉List集合;反過來List.toArray();
七、android.text.format.Formatter類中formatFileSize(Context, long)方法,用來格式化文件Size(B → KB → MB → GB);
八、android.media.ThumbnailUtils類,用來獲取媒體(圖片、視頻)縮略圖;
九、String類中的format(String, Object...)方法,用來格式化strings.xml中的字符串(多謝 @droider An 提示:Context類中getString(int, Object... )方法用起來更加方便);
十、View類中的三個方法:callOnClick(),performClick(),performLongClick(),用於觸發View的點擊事件;
十一、TextUtils類中的isEmpty(String)方法,判斷字符串是否爲null或"";
十二、TextView類中的append(String)方法,添加文本;
1三、View類中的getDrawingCache()等一系列方法,目前只知道能夠用來截圖;
1四、DecimalFormat類,用於字串格式化包括指定位數、百分數、科學計數法等;
1五、System類中的arraycopy(src, srcPos, dest, destPos, length)方法,用來copy數組;
1六、Fragment類中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()時貌似Fragment的其它生命週期方法都不會被調用,太坑爹!
1七、Activity類中的onWindowFocusChanged(boolean)方法;
1八、View類中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,獲取View在窗口/屏幕中的位置;
1九、TextView類中的setTransformationMethod(TransformationMethod)方法,可用來實現「顯示密碼」功能;
20、TextWatcher接口,用來監聽文本輸入框內容的改變;
2一、View類中的setSelected(boolean)方法結合android:state_selected=""用來實現圖片選中效果;
2二、Surface設置透明:SurfaceView.setZOrderOnTop(true);
SurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);可是會擋住其它控件;
2三、ListView或GridView類中的setFastScrollEnabled(boolean)方法,用來設置快速滾動滑塊是否可見,固然前提是item夠多;
2四、PageTransformer接口,用來自定義ViewPager頁面切換動畫,用setPageTransformer(boolean, PageTransformer)方法來進行設置;
2五、apache提供的一系列jar包:commons-lang.jar,commons-collections.jar,commons-beanutils.jar等,裏面不少方法多是你曾經用幾十幾百行代碼實現過的,可是執行效率或許要差不少,好比:ArrayUtils,StringUtils……;
2六、AndroidTestCase類,Android單元測試;
2七、Activity類中的onNewIntent(intent)方法。java
一、getParent().requestDisallowInterceptTouchEvent(true);剝奪父view對touch事件的處理權,誰用誰知道。
二、ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);用於根據一個起始顏色值和一個結束顏色值以及一個偏移量生成一個新的顏色,分分鐘實現相似於微信底部欄滑動顏色漸變。
三、Canvas中clipRect、clipPath和clipRegion剪切區域的API。
四、Bitmap.extractAlpha ();返回一個新的Bitmap,capture原始圖片的alpha值。有的時候咱們須要動態的修改一個元素的背景圖片又不但願使用多張圖片的時候,經過這個方法,結合Canvas和Paint能夠動態的修改一個純色Bitmap的顏色。
五、HandlerThread,代替不停new Thread開子線程的重複體力寫法。
六、IntentService,一個能夠幹完活後本身去死且不須要咱們去管理子線程的Service。
七、Palette,5.0加入的能夠提取一個Bitmap中突出顏色的類,結合上面的Bitmap.extractAlpha,你懂的。
八、Executors. newSingleThreadExecutor();這個是java的,以前不知道它,本身花很大功夫去研究了單線程順序執行的任務隊列。。
九、android:animateLayoutChanges="true",LinearLayout中添加View的動畫的辦法,支持經過setLayoutTransition()自定義動畫。
十、ViewDragHelper,自定義ViewGroup處理各類事件很累吧,嗯? what the fuck!!
十一、GradientDrawable,以前接手公司的項目,發現有個陰影效果還不錯,覺得是切的圖片,一看代碼,什麼鬼= =!
十二、AsyncQueryHandler,若是作系統工具類的開發,好比聯繫人短信輔助工具等,確定免不了和ContentProvider打交道,若是數據量不是很大的狀況下,隨便搞,若是數據量大的狀況下,瞭解下這個類是頗有必要的,須要注意的是,這玩意兒吃異常..
1三、ViewFlipper,實現多個view的切換(循環),可自定義動畫效果,且可針對單個切換指定動畫。
1四、有朋友提到了在自定義View時有些方法在開啓硬件加速的時候沒有效果的問題,在API16以後確實有不少方法不支持硬件加速,一般咱們關閉硬件加速都是在清單文件中經過<application android:hardwareAccelerated="false" ...>,其實android也提供了針對特定View關閉硬件加速的方法,調用View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);便可。
1五、android util包中的Pair類,能夠方便的用來存儲一"組"數據。注意不是key value。
1六、PointF,graphics包中的一個類,咱們常常見到在處理Touch事件的時候分別定義一個downX,一個downY用來存儲一個座標,若是座標少還好,若是要記錄的座標過多那代碼就很差看了。用PointF(float x, float y);來描述一個座標點會清楚不少。
1七、StateListDrawable,定義Selector一般的辦法都是xml文件,可是有的時候咱們的圖片資源多是從服務器動態獲取的,好比不少app所謂的皮膚,這種時候就只能通StateListDrawable
來完成了,各類addState便可。
1八、android:descendantFocusability,ListView的item中CheckBox等元素搶焦點致使item點擊事件沒法響應時,除了給對應的元素設置 focusable,更簡單的是在item根佈局加上android:descendantFocusability=」blocksDescendants」
19、android:duplicateParentState="true",讓子View跟隨其Parent的狀態,如pressed等。常見的使用場景是某些時候一個按鈕很小,咱們想要擴大其點擊區域的時候一般會再給其包裹一層佈局,將點擊事件寫到Parent上,這時候若是但願被包裹按鈕的點擊效果對應的Selector繼續生效的話,這時候duplicateParentState就派上用場了。
20、includeFontPadding="false",TextView默認上下是有必定的padding的,有時候咱們可能不須要上下這部分留白,加上它便可。
2一、Messenger,面試的時候一般都會被問到進程間通訊,通常狀況下你們都是開始背書,AIDL巴拉巴拉。。有一天在鴻神的博客看到這個,嗯,如他所說,又能夠裝一下了。
2二、TextView.setError();用於驗證用戶輸入。
2三、ViewConfiguration.getScaledTouchSlop();觸發移動事件的最小距離,自定義View處理touch事件的時候,有的時候須要判斷用戶是否真的存在movie,系統提供了這樣的方法。
2四、ValueAnimator.reverse(); 順暢的取消動畫效果。
2五、ViewStub,有的時候一塊區域須要根據狀況顯示不一樣的佈局,一般咱們都會經過setVisibility的方法來顯示和隱藏不一樣的佈局,可是這樣默認是所有加載的,用ViewStub能夠更好的提高性能。
2六、onTrimMemory,在Activity中重寫此方法,會在內存緊張的時候回調(支持多個級別),便於咱們主動的進行資源釋放,避免OOM。android
UrlQuerySanitizer——使用這個工具能夠方便對 URL 進行檢查。
Fragment.setArguments——由於在構建 Fragment 的時候不能加參數,因此這是個很好的東西,能夠在建立 Fragment 以前設置參數(即便在 configuration 改變的時候仍然會致使銷燬/重建)。
DialogFragment.setShowsDialog ()—— 這是一個很巧妙的方式,DialogFragment 能夠做爲正常的 Fragment 顯示!這裏可讓 Fragment 承擔雙重任務。我一般在建立 Fragment 的時候把 onCreateView ()和 onCreateDialo.g ()都加上,就能夠建立一個具備雙重目的的 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觸摸機制瞭解更多,這個演講會令你驚歎不已。)
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——經過使用備份文件進行文件的原子化操做。這個知識點以前我也寫過,不過最好仍是有出一個官方的版本比較好。
-----------------------------------------------------------------------------------------------
譯文太多不知道出自哪裏的譯文了,並且有些不全,原文出自 Dan Lew 博客,有 5 篇,強烈推薦。
Android Tips Round-Up, Part 1
Android Tips Round-Up, Part 2
Android Tips Round-Up, Part 3
Android Tips Round-Up, Part 4
Android Tips Round-Up, Part 5
最後作個福利廣告 zhengxiaopeng/android-dev-bookmarks · GitHubgit