日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 小技巧

發布時間:2024/4/17 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 小技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

原文出處:?Dan Lew???譯文出處:Android Performance???

前言

本文是一篇譯文,這篇是這個系列的第一篇.講述的是Android開發中遇到的一些好用的小技巧,或者一些實用的API,很多人都知道,但也有人不知道,記錄下來,如果能幫助到大家,也是極好的.由于不是嚴格的博文,所以翻譯也不那么嚴格,有些工具和類我也會經常用,所以我會根據自己的想法去寫.有些地方坐在并沒有將這個工具的作用講出來,我會補充上去.

正文

Activity.startActivities()?常用于在應用程序中間啟動其他的Activity.

TextUtils.isEmpty()?簡單的工具類,用于檢測是否為空

Html.fromHtml()?用于生成一個Html,參數可以是一個字符串.個人認為它不是很快,所以我不怎么經常去用.(我說不經常用它是為了重點突出這句話:請多手動構建 Spannable 來替換 Html.fromHtml),但是它對渲染從 web 上獲取的文字還是很不錯的。

TextView.setError()?在驗證用戶輸入的時候很棒

Build.VERSION_CODES?這個標明了當前的版本號,在處理兼容性問題的時候經常會用到.點進去可以看到各個版本的不同特性

Log.getStackTraceString()?方便的日志類工具,方法Log.v()、Log.d()、Log.i()、Log.w()和Log.e()都是將信息打印到LogCat中,有時候需要將出錯的信息插入到數據庫或一個自定義的日志文件中,那么這種情況就需要將出錯的信息以字符串的形式返回來,也就是使用static String getStackTraceString(Throwable tr)方法的時候.

LayoutInflater.from()?顧名思義,用于Inflate一個layout,參數是layout的id.這個經常寫Adapter的人會用的比較多.

ViewConfiguration.getScaledTouchSlop()?使用 ViewConfiguration 中提供的值以保證所有觸摸的交互都是統一的。這個方法獲取的值表示:用戶的手滑動這個距離后,才判定為正在進行滑動.當然這個值也可以自己來決定.但是為了一致性,還是使用標準的值較好.

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觸摸機制了解更多,這個演講會令你驚嘆不已。)

防止截屏

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

?

轉載于:https://my.oschina.net/yaly/blog/739226

總結

以上是生活随笔為你收集整理的Android 小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。