- 每次使用軟引用、弱引用(SoftReference、WeakReference)時對引用進行檢查判空
- 5.0+版本隱式啟動Service會拋出異常(intent must explict異常)
- 隱式Intent的運行時檢查保護
PackageManager().resolveActivity(intent)、intent.resolveActivity(PMS) - 需要被隱式啟動的Activity,則必須在其
<intent-filter>中加入"android.intent.category.DEFAULT"屬性,否則異常ActivityNotFoundException - 在沒有任何其他Intent Flag組合和taskAffinity設(shè)置的情況下,不會在新的Task中創(chuàng)建實例
- Intent Flag并不能代替LaunchMode
- 通知欄使用TaskStackBuilder返回棧時候,點擊顯示后按Back鍵,會返回到指定的Activity(
addParentStack()添加XML指定),而不是返回主界面 - 應(yīng)用UI是繪制在主線程中的,這個線程就是ActivityThread,它并沒有繼承自Thread,而是一個獨立的類,只是在其main方法中開了一個Looper循環(huán)消息,不斷接收處理發(fā)到主線程里面的消息
- ApplicationThread也不是一個Thread,是一個Binder,主要用于應(yīng)用進程和ActivityManagerService進程間通信的
- Fragment對臨時數(shù)據(jù)的保存,僅依靠
onSaveInstanceState()是不行的,還要在onDestoryView()中進行相應(yīng)操作,持久性的數(shù)據(jù),應(yīng)在onPause()中保存 - FileFilter類,此類根據(jù)文件名的擴展名、文件名等是否為來篩選文件、文件夾
- "@":引用自定義資源、"@android:type":引用系統(tǒng)資源、"@*" :引用系統(tǒng)的非public資源、"?":引用系統(tǒng)主題屬性、"@+" :創(chuàng)建或引用資源
- 選擇器selelctor有ColorStateList和StateListDrawable
-
android:allowTaskReparenting:用于設(shè)定Activity能夠從啟動它的任務(wù)中轉(zhuǎn)移到另一個與啟動它的任務(wù)有親緣關(guān)系的任務(wù)中,條件是在這個有親緣關(guān)系的任務(wù)被帶到前臺的時候并設(shè)置了true - AdapterViewFlipper,StackView 類似于ListView顯示為View的一個組件
-
android:adjustViewBounds:是否保持ImageView的長寬比,需要和maxWidth、maxHeight一起使用 -
android:cropToPadding:是否截取指定的空白區(qū)域代替,單獨使用沒效果,需要和scrollY一起使用 -
listView.setRecyclerListener監(jiān)聽當組件被放入回收站 - ScrollView滾動到頂部必須要用消息機制Handler或者直接post
-
setImageResource、setImageBitmap、setBitmapDrawable設(shè)置圖片 -
Intent.FLAG_ACTIVITY_NEW_DOCUMENT系統(tǒng)就會將創(chuàng)建的Activity 作為一個新的Task顯示在 Overview Screen中 -
setHasOptionsMenu(true)使Fragment可以點擊菜單onCreateOptionsMenu()生效 - 如果對View的寬高進行修改了,不要調(diào)用
super.onMeasure( widthMeasureSpec, heightMeasureSpec)要調(diào)用setMeasuredDimension( widthsize, heightsize); -
adb logcat | grep "TAG_NAME"&adb logcat -s "TAG_NAME"終端查看log指定TagName - AlarmManager取消提醒一定要再重新創(chuàng)建所有的對象包括:Intent,PendingIntent且AlarmManager對象對應(yīng)的action必須要一樣
-
AsyncTask.executeOnExecutor(FULL_TASK_EXECUTOR)參數(shù)表示使用自定義線程池 -
<uses-permission android:name="android.permission.XXX" android:maxSdkVersion="18"/>表示只在API <= 18時,才申請該權(quán)限 - CardView里元素和CardView重疊了設(shè)置
app:cardPreventCornerOverlap="false",再處理元素背景、圖片圓角 -
getBaseContext():If you want to access Context from another context within application you can access,ContextWrapper中的方法 - ResultReceiver用來接收其它進程回調(diào)結(jié)果的通用接口,使用直接實現(xiàn)該接口并實現(xiàn)
onReceiveResult(int, bundle) - Canvas方法根據(jù)功能來看大致分為:以drawXXX為主的繪制方法、以clipXXX為主的裁剪方法、以scale、skew、translate和rotate組成的Canvas變換方法、以saveXXX和restoreXXX構(gòu)成的畫布鎖定和還原
-
saveLayerXXX()會將所有的操作存到一個新的Bitmap中而不影響當前Canvas的Bitmap,而save()則是在當前的Bitmap中進行操作,并且只能針對Bitmap的形變和裁剪進行操作 - Dagger2:Component在搜索到目標類中用Inject注解標注的屬性后,Component就會去Module中去查找用Provides標注的對應(yīng)的創(chuàng)建類實例方法
-
setArguments()必須在fragment創(chuàng)建以后,添加給Activity前完成 - fragment能夠從Activity中接收返回結(jié)果,但是其自設(shè)無法產(chǎn)生返回結(jié)果,只有Activity擁有返回結(jié)果
- 使用Fragment時,通過
setTargetFragment()和onActivityResult()實現(xiàn)兩個fragment之間的數(shù)據(jù)傳遞 - Fragment在
onPause()和onStop()中提交事務(wù)會引發(fā)異常,如果要在可能丟失狀態(tài)的情況下提交事務(wù),請使用commitAllowingStateLoss() - 如果在除
onCreate()之外的其他Activity生命周期函數(shù)中提交transaction,你可以在FragmentActivity的onResumeFragments()和onPostResume()中提交 - 通過
getFragments()可以獲取到當前FragmentManager管理的棧內(nèi)所有Fragment - 觀察者模式是一種一對多的關(guān)系,對于
setXXXListener()是1對1的關(guān)系,應(yīng)該叫回調(diào) -
applyDimension(int unit, float value, DisplayMetrics metrics)參數(shù)分別單位、值大小、屏幕密度 -
Paint.getTextBounds(text, 0, len, bounds)當你通過這個方法來獲取尺寸的時候,可以得到能夠包裹文字的最小矩形對象 - 多線程定時器中盡可能使用
ScheduledExecutorService(JDK1.5以后)替代Timer -
android:fillViewport="true"讓ScrollView內(nèi)的view強行match_parent -
getMeasuredHeight()是實際View的大小與屏幕無關(guān),getHeight()則是屏幕顯示的大小,當超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外的大小 - 使用靜態(tài)變量來緩存數(shù)據(jù)時,不管是在Application類還是其他類,都要注意因應(yīng)用重建而引發(fā)的問題
-
android:clipToPadding="true"默認true,ListView向上滑動時間距消失,對于父view padding所占的位置也繪制 -
android:clipChildren="true"默認是true,這個屬性是讓子view不受父view大小的限制,可以超過父view的寬高,延伸到周圍view內(nèi)部 -
getSupportFragmentManager()和getChildFragmentManager()嵌套Fragment區(qū)別 -
ProcessBuilder和Runtime.getRuntime().exec()執(zhí)行命令 - RemoteViewsService/RemoteViewsFactory:小控件ListView顯示需要用到的類
- StorageManager反射調(diào)用隱藏接口
getVolumePaths(),實現(xiàn)獲取所有存儲器列表、getVolumeState判斷是否掛載 - 使用
Class.forName()或者getClassLoader().loadClass(),其中的類名必須是從包名到類名的完整路徑 -
onResumeFragments()、onPostResume()執(zhí)行Fragment事務(wù)commit - Messenger進程間傳遞數(shù)據(jù),如果通過bundle來攜帶數(shù)據(jù)則從另一個進程取出bundle時,需要
bundle.setClassLoader(getClass().getClassLoader())來自己設(shè)置bundle的類加載器 -
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)View不隨SystemUI顯示/隱藏而移動 - 要獲取截圖先要通過
setDrawingCacheEnable(true),然后再調(diào)用getDrawingCache()就可以獲得view的cache圖片 -
View.setLayerType(View.LAYER_TYPE_HARDWARE, null)復(fù)雜動畫開啟硬件加載可以更平滑,動畫完畢需要釋放硬件加速 - 指定此屬性, 可以使子控件單獨獲取焦點, 不影響父元素
android:descendantFocusability="blocksDescendants" - View類的
performClick()和callOnclick()都可以實現(xiàn)不用手動點擊,直接觸發(fā)View的點擊事件 -
public static interface ViewTreeObserver.OnPreDrawListener為即將繪制視圖樹時執(zhí)行的回調(diào)函數(shù)定義的接口 - Activity的
managedQuery()內(nèi)部調(diào)用getContentResolver().query(),它根據(jù)Activity的生命周期對Cursor對象進行管理,避免了一些因Cursor是否釋放引起的問題(注:此方法已經(jīng)過時,使用CursorLoader替代) -
getAction()& ACTION_POINTER_INDEX_MASK獲得pointer的id等同于getActionIndex(),getAction()& ACTION_MASK獲得pointer事件類型等同于getActionMasked () - 觀察Activity棧腳本
adb shell dumpsys activity | sed -n -e '/Stack #/p' -e '/Running activities/,/Run #0/p' - ListActivity中ListView的Id為固定不變的,為
"@id/android/list" - ListView的
setSelectionFromTop()和RecyclerView中LayoutManager的scrollToPositionWithOffset()都是滑動到指定位置 - 調(diào)用
saveLayer()之后,創(chuàng)建了一個透明的圖層,之后在調(diào)用restore()之前,都是在這個圖層上進行操作,而save()則是直接在原先的圖層上操作,那么對于某些操作,不希望原來圖層的狀態(tài)影響到它,那么我們應(yīng)該使用saveLayer() -
layout_width="wrap_content"(等同"0dp"),代表的是控件要優(yōu)先盡可能的小 - 如果要 include 的子布局的根標簽是
< Framelayout/>,那么最好替換為<merge/>這樣可以減少嵌套 - 啟動的Activity的launch mode為
SingleInstacne或SignleTask,且不論是從Activity還是從Fragment啟動該Activity都會造成onActivityResult()被立即觸發(fā) - 5.0去掉ListView最后Item的divider
android:footerDividersEnabled="false" android:overScrollFooter="@android:color/transparent" - Android 3.2(API 13)以后,在設(shè)置Activity的
android:configChanges="orientation|keyboardHidden"后,還是一樣會重新調(diào)用各個生命周期的,必須設(shè)置"ScreenSize" - Fragments do not have an on
RestoreInstanceState( ),You can achieve the same result inonActivityCreated( ) -
resolveSizeAndState()比getDefaultSize()多State標志位信息和AT_MOST的判斷 - DecorView是FramLayout的子類,DecorView的孩子節(jié)點就是一個LinearLayout,這個LinearLayout的孩子系節(jié)點就包括狀態(tài)欄和我們自己寫的布局(ContentView)
-
android:duplicateParentState:可以使得子 View 可以復(fù)制父 View 的狀態(tài) -
android:digits:EditText只能用的字符 - RoundedBitmapDrawable:support.v4內(nèi)置的圓角圖片
-
android:enterFadeDuration、android:exitFadeDuration:selector改變狀態(tài)時淡入淡出 -
getResources().getDimension(R.dimen.xxx)獲取的值并不一定是dimens.xml中定義的,其值受屏幕密度影響 -
Fragment instantiate():用給定的類名創(chuàng)建一個新的Fragment對象實例。它跟調(diào)用空的構(gòu)造器一樣 - 啟動頁面防止加載白屏設(shè)置activity的theme中的
windowbackground="@null" - 如果讓應(yīng)用生成的數(shù)據(jù)不被媒體庫掃描到,在生成數(shù)據(jù)的文件夾下創(chuàng)建一個名為".nomedia"的隱藏文件,避免出現(xiàn)一些無意義的文件也被媒體庫掃描到的情況
- Fragment本質(zhì)上是嵌入在Activity中一個ViewGroup的View,但是谷歌給這個View賦予了生命周期
-
overridePendingTransition(0, 0):Activity過渡無動畫 ,start和finish后面調(diào)用 -
MotionEvent中g(shù)etX() getRawX()區(qū)別:前者是相對于View左上角的X坐標,后者是相對于屏幕左上角的X坐標 -
getLocationInWindow():控件在其父窗口中的坐標位置 、getLocationOnScreen:控件在其整個屏幕上的坐標位置,onWindowFocusChanged ()之后才能使用 -
getLocalVisibleRect():獲取View自身可見的坐標區(qū)域、getGlobalVisibleRect():獲取View在屏幕絕對坐標系中的可視區(qū)域,onWindowFocusChanged ()之后才能使用 -
StartAnimation():立即開啟動畫效果、SetAnimation():開啟動畫效果需要其父類調(diào)用invalidate() -
setWillNotDraw(true):當自定義View繼承自 ViewGroup 、且本身并不具備任何繪制時,設(shè)置為 true 后,系統(tǒng)會進行相應(yīng)的優(yōu)化 -
android:baselineAligned="false":當LinerLayout的子View都是ViewGroup(自定義控件除外)時,子View已經(jīng)不需要基準線對齊了,false可以提高性能 -
invalidateOptionsMenu():在同一Activity不同F(xiàn)ragment需要顯示不同的Menu的,調(diào)用該方法刷新Menu -
setTranscripMode(): 設(shè)置只要ListView刷新就會滑動 - TextView設(shè)置了
TextUtils.TruncateAt.MARQUEE,layout_height 不要設(shè)置MATCH_PARENT或者WRAP_CONTENT,否則焦點會有問題 - 監(jiān)聽USB插拔靜態(tài)廣播需要加改過濾
<data android:scheme="file"/>
Android Tips
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
- ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
- 【友盟+】產(chǎn)品總監(jiān)陸義元在“數(shù)據(jù)化運營”論壇上,作了“網(wǎng)紅盛行,用戶到粉絲如何轉(zhuǎn)變”的主題分享。 陸義元認為,移動...