- 每次使用軟引用灵临、弱引用(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)聽當(dāng)組件被放入回收站 - 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中而不影響當(dāng)前Canvas的Bitmap,而save()
則是在當(dāng)前的Bitmap中進行操作世舰,并且只能針對Bitmap的形變和裁剪進行操作 - Dagger2:Component在搜索到目標(biāo)類中用Inject注解標(biāo)注的屬性后动雹,Component就會去Module中去查找用Provides標(biāo)注的對應(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()
可以獲取到當(dāng)前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)
當(dāng)你通過這個方法來獲取尺寸的時候效扫,可以得到能夠包裹文字的最小矩形對象 - 多線程定時器中盡可能使用
ScheduledExecutorService
(JDK1.5以后)替代Timer -
android:fillViewport="true"
讓ScrollView內(nèi)的view強行match_parent -
getMeasuredHeight()
是實際View的大小與屏幕無關(guān),getHeight()
則是屏幕顯示的大小直砂,當(dāng)超出屏幕后菌仁,getMeasuredHeight()
等于getHeight()
加上屏幕之外的大小 - 使用靜態(tài)變量來緩存數(shù)據(jù)時,不管是在Application類還是其他類哆键,都要注意因應(yīng)用重建而引發(fā)的問題
-
android:clipToPadding="true"
默認(rèn)true掘托,ListView向上滑動時間距消失,對于父view padding所占的位置也繪制 -
android:clipChildren="true"
默認(rèn)是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 的子布局的根標(biāo)簽是
< 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標(biāo)志位信息和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坐標(biāo),后者是相對于屏幕左上角的X坐標(biāo) -
getLocationInWindow()
:控件在其父窗口中的坐標(biāo)位置 窿给、getLocationOnScreen
:控件在其整個屏幕上的坐標(biāo)位置贵白,onWindowFocusChanged ()
之后才能使用 -
getLocalVisibleRect()
:獲取View自身可見的坐標(biāo)區(qū)域、getGlobalVisibleRect()
:獲取View在屏幕絕對坐標(biāo)系中的可視區(qū)域崩泡,onWindowFocusChanged ()
之后才能使用 -
StartAnimation()
:立即開啟動畫效果禁荒、SetAnimation()
:開啟動畫效果需要其父類調(diào)用invalidate()
-
setWillNotDraw(true)
:當(dāng)自定義View繼承自 ViewGroup 、且本身并不具備任何繪制時角撞,設(shè)置為 true 后呛伴,系統(tǒng)會進行相應(yīng)的優(yōu)化 -
android:baselineAligned="false"
:當(dāng)LinerLayout的子View都是ViewGroup(自定義控件除外)時勃痴,子View已經(jīng)不需要基準(zhǔn)線對齊了,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)系作者
- 文/潘曉璐 我一進店門缴守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镇辉,你說我怎么就攤上這事屡穗。” “怎么了忽肛?”我有些...
- 文/不壞的土叔 我叫張陵村砂,是天一觀的道長。 經(jīng)常有香客問我屹逛,道長础废,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任罕模,我火速辦了婚禮评腺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淑掌。我一直安慰自己蒿讥,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布抛腕。 她就那樣靜靜地躺著芋绸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兽埃。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼敢伸,長吁一口氣:“原來是場噩夢啊……” “哼扯饶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起池颈,我...
- 正文 年R本政府宣布,位于F島的核電站娜庇,受9級特大地震影響塔次,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜名秀,卻給世界環(huán)境...
- 文/蒙蒙 一励负、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匕得,春花似錦继榆、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至考阱,卻和暖如春翠忠,著一層夾襖步出監(jiā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)變”的主題分享宜狐。 陸義元認(rèn)為势告,移動...