Android Tips

  1. 每次使用軟引用灵临、弱引用(SoftReference芝薇、WeakReference)時對引用進行檢查判空
  2. 5.0+版本隱式啟動Service會拋出異常(intent must explict異常)
  3. 隱式Intent的運行時檢查保護PackageManager().resolveActivity(intent)播玖、intent.resolveActivity(PMS)
  4. 需要被隱式啟動的Activity其爵,則必須在其 <intent-filter>中加入"android.intent.category.DEFAULT"屬性仰挣,否則異常ActivityNotFoundException
  5. 在沒有任何其他Intent Flag組合和taskAffinity設(shè)置的情況下伴逸,不會在新的Task中創(chuàng)建實例
  6. Intent Flag并不能代替LaunchMode
  7. 通知欄使用TaskStackBuilder返回棧時候,點擊顯示后按Back鍵膘壶,會返回到指定的Activity(addParentStack()添加XML指定)错蝴,而不是返回主界面
  8. 應(yīng)用UI是繪制在主線程中的,這個線程就是ActivityThread香椎,它并沒有繼承自Thread漱竖,而是一個獨立的類,只是在其main方法中開了一個Looper循環(huán)消息畜伐,不斷接收處理發(fā)到主線程里面的消息
  9. ApplicationThread也不是一個Thread馍惹,是一個Binder,主要用于應(yīng)用進程和ActivityManagerService進程間通信的
  10. Fragment對臨時數(shù)據(jù)的保存玛界,僅依靠onSaveInstanceState()是不行的万矾,還要在onDestoryView()中進行相應(yīng)操作,持久性的數(shù)據(jù)慎框,應(yīng)在onPause()中保存
  11. FileFilter類良狈,此類根據(jù)文件名的擴展名、文件名等是否為來篩選文件笨枯、文件夾
  12. "@":引用自定義資源薪丁、"@android:type":引用系統(tǒng)資源、"@*" :引用系統(tǒng)的非public資源馅精、"严嗜?":引用系統(tǒng)主題屬性、"@+" :創(chuàng)建或引用資源
  13. 選擇器selelctor有ColorStateList和StateListDrawable
  14. android:allowTaskReparenting :用于設(shè)定Activity能夠從啟動它的任務(wù)中轉(zhuǎn)移到另一個與啟動它的任務(wù)有親緣關(guān)系的任務(wù)中洲敢,條件是在這個有親緣關(guān)系的任務(wù)被帶到前臺的時候并設(shè)置了true
  15. AdapterViewFlipper漫玄,StackView 類似于ListView顯示為View的一個組件
  16. android:adjustViewBounds :是否保持ImageView的長寬比,需要和maxWidth压彭、maxHeight一起使用
  17. android:cropToPadding:是否截取指定的空白區(qū)域代替睦优,單獨使用沒效果,需要和scrollY一起使用
  18. listView.setRecyclerListener監(jiān)聽當(dāng)組件被放入回收站
  19. ScrollView滾動到頂部必須要用消息機制Handler或者直接post
  20. setImageResource壮不、setImageBitmap汗盘、setBitmapDrawable設(shè)置圖片
  21. Intent.FLAG_ACTIVITY_NEW_DOCUMENT 系統(tǒng)就會將創(chuàng)建的Activity 作為一個新的Task顯示在 Overview Screen中
  22. setHasOptionsMenu(true)使Fragment可以點擊菜單onCreateOptionsMenu()生效
  23. 如果對View的寬高進行修改了,不要調(diào)用 super.onMeasure( widthMeasureSpec, heightMeasureSpec) 要調(diào)用 setMeasuredDimension( widthsize, heightsize);
  24. adb logcat | grep "TAG_NAME"& adb logcat -s "TAG_NAME" 終端查看log指定TagName
  25. AlarmManager取消提醒一定要再重新創(chuàng)建所有的對象包括:Intent询一,PendingIntent且AlarmManager對象對應(yīng)的action必須要一樣
  26. AsyncTask.executeOnExecutor(FULL_TASK_EXECUTOR) 參數(shù)表示使用自定義線程池
  27. <uses-permission android:name="android.permission.XXX" android:maxSdkVersion="18"/>表示只在API <= 18時衡未,才申請該權(quán)限
  28. CardView里元素和CardView重疊了設(shè)置 app:cardPreventCornerOverlap="false"尸执,再處理元素背景家凯、圖片圓角
  29. getBaseContext():If you want to access Context from another context within application you can access缓醋,ContextWrapper中的方法
  30. ResultReceiver用來接收其它進程回調(diào)結(jié)果的通用接口,使用直接實現(xiàn)該接口并實現(xiàn)onReceiveResult(int, bundle)
  31. Canvas方法根據(jù)功能來看大致分為:以drawXXX為主的繪制方法绊诲、以clipXXX為主的裁剪方法送粱、以scale、skew掂之、translate和rotate組成的Canvas變換方法抗俄、以saveXXX和restoreXXX構(gòu)成的畫布鎖定和還原
  32. saveLayerXXX()會將所有的操作存到一個新的Bitmap中而不影響當(dāng)前Canvas的Bitmap,而save()則是在當(dāng)前的Bitmap中進行操作世舰,并且只能針對Bitmap的形變和裁剪進行操作
  33. Dagger2:Component在搜索到目標(biāo)類中用Inject注解標(biāo)注的屬性后动雹,Component就會去Module中去查找用Provides標(biāo)注的對應(yīng)的創(chuàng)建類實例方法
  34. setArguments()必須在fragment創(chuàng)建以后,添加給Activity前完成
  35. fragment能夠從Activity中接收返回結(jié)果跟压,但是其自設(shè)無法產(chǎn)生返回結(jié)果胰蝠,只有Activity擁有返回結(jié)果
  36. 使用Fragment時,通過setTargetFragment()onActivityResult()實現(xiàn)兩個fragment之間的數(shù)據(jù)傳遞
  37. Fragment在onPause()onStop()中提交事務(wù)會引發(fā)異常震蒋,如果要在可能丟失狀態(tài)的情況下提交事務(wù)茸塞,請使用commitAllowingStateLoss()
  38. 如果在除onCreate()之外的其他Activity生命周期函數(shù)中提交transaction,你可以在FragmentActivity的onResumeFragments()onPostResume()中提交
  39. 通過getFragments()可以獲取到當(dāng)前FragmentManager管理的棧內(nèi)所有Fragment
  40. 觀察者模式是一種一對多的關(guān)系查剖,對于setXXXListener()是1對1的關(guān)系钾虐,應(yīng)該叫回調(diào)
  41. applyDimension(int unit, float value, DisplayMetrics metrics)參數(shù)分別單位、值大小笋庄、屏幕密度
  42. Paint.getTextBounds(text, 0, len, bounds)當(dāng)你通過這個方法來獲取尺寸的時候效扫,可以得到能夠包裹文字的最小矩形對象
  43. 多線程定時器中盡可能使用ScheduledExecutorService(JDK1.5以后)替代Timer
  44. android:fillViewport="true"讓ScrollView內(nèi)的view強行match_parent
  45. getMeasuredHeight()是實際View的大小與屏幕無關(guān),getHeight()則是屏幕顯示的大小直砂,當(dāng)超出屏幕后菌仁, getMeasuredHeight()等于 getHeight()加上屏幕之外的大小
  46. 使用靜態(tài)變量來緩存數(shù)據(jù)時,不管是在Application類還是其他類哆键,都要注意因應(yīng)用重建而引發(fā)的問題
  47. android:clipToPadding="true" 默認(rèn)true掘托,ListView向上滑動時間距消失,對于父view padding所占的位置也繪制
  48. android:clipChildren="true"默認(rèn)是true籍嘹,這個屬性是讓子view不受父view大小的限制闪盔,可以超過父view的寬高,延伸到周圍view內(nèi)部
  49. getSupportFragmentManager()getChildFragmentManager() 嵌套Fragment區(qū)別
  50. ProcessBuilderRuntime.getRuntime().exec()執(zhí)行命令
  51. RemoteViewsService/RemoteViewsFactory:小控件ListView顯示需要用到的類
  52. StorageManager反射調(diào)用隱藏接口getVolumePaths()辱士,實現(xiàn)獲取所有存儲器列表泪掀、getVolumeState判斷是否掛載
  53. 使用Class.forName()或者getClassLoader().loadClass(),其中的類名必須是從包名到類名的完整路徑
  54. onResumeFragments()颂碘、onPostResume() 執(zhí)行Fragment事務(wù)commit
  55. Messenger進程間傳遞數(shù)據(jù)异赫,如果通過bundle來攜帶數(shù)據(jù)則從另一個進程取出bundle時,需要bundle.setClassLoader(getClass().getClassLoader())來自己設(shè)置bundle的類加載器
  56. setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)View不隨SystemUI顯示/隱藏而移動
  57. 要獲取截圖先要通過setDrawingCacheEnable(true) ,然后再調(diào)用getDrawingCache()就可以獲得view的cache圖片
  58. View.setLayerType(View.LAYER_TYPE_HARDWARE, null)復(fù)雜動畫開啟硬件加載可以更平滑塔拳,動畫完畢需要釋放硬件加速
  59. 指定此屬性, 可以使子控件單獨獲取焦點, 不影響父元素
    android:descendantFocusability="blocksDescendants"
  60. View類的performClick()callOnclick()都可以實現(xiàn)不用手動點擊鼠证,直接觸發(fā)View的點擊事件
  61. public static interface ViewTreeObserver.OnPreDrawListener即將繪制視圖樹時執(zhí)行的回調(diào)函數(shù)定義的接口
  62. Activity的managedQuery()內(nèi)部調(diào)用getContentResolver().query(),它根據(jù)Activity的生命周期對Cursor對象進行管理靠抑,避免了一些因Cursor是否釋放引起的問題(注:此方法已經(jīng)過時量九,使用CursorLoader替代)
  63. getAction()& ACTION_POINTER_INDEX_MASK獲得pointer的id等同于getActionIndex()getAction()& ACTION_MASK獲得pointer事件類型等同于getActionMasked ()
  64. 觀察Activity棧腳本
    adb shell dumpsys activity | sed -n -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
  65. ListActivity中ListView的Id為固定不變的颂碧,為"@id/android/list"
  66. ListView的setSelectionFromTop()和RecyclerView中LayoutManager的scrollToPositionWithOffset()都是滑動到指定位置
  67. 調(diào)用saveLayer()之后荠列,創(chuàng)建了一個透明的圖層,之后在調(diào)用restore()之前载城,都是在這個圖層上進行操作肌似,而save()則是直接在原先的圖層上操作,那么對于某些操作诉瓦,不希望原來圖層的狀態(tài)影響到它川队,那么我們應(yīng)該使用saveLayer()
  68. layout_width="wrap_content" (等同 "0dp"),代表的是控件要優(yōu)先盡可能的小
  69. 如果要 include 的子布局的根標(biāo)簽是< Framelayout/>垦搬,那么最好替換為 <merge/>這樣可以減少嵌套
  70. 啟動的Activity的launch mode為SingleInstacneSignleTask呼寸,且不論是從Activity還是從Fragment啟動該Activity都會造成onActivityResult()被立即觸發(fā)
  71. 5.0去掉ListView最后Item的dividerandroid:footerDividersEnabled="false" android:overScrollFooter="@android:color/transparent"
  72. Android 3.2(API 13)以后,在設(shè)置Activity的android:configChanges="orientation|keyboardHidden"后猴贰,還是一樣會重新調(diào)用各個生命周期的,必須設(shè)置"ScreenSize"
  73. Fragments do not have an onRestoreInstanceState( )对雪,You can achieve the same result in onActivityCreated( )
  74. resolveSizeAndState()getDefaultSize()多State標(biāo)志位信息和AT_MOST的判斷
  75. DecorView是FramLayout的子類,DecorView的孩子節(jié)點就是一個LinearLayout米绕,這個LinearLayout的孩子系節(jié)點就包括狀態(tài)欄和我們自己寫的布局(ContentView)
  76. android:duplicateParentState:可以使得子 View 可以復(fù)制父 View 的狀態(tài)
  77. android:digits:EditText只能用的字符
  78. RoundedBitmapDrawable:support.v4內(nèi)置的圓角圖片
  79. android:enterFadeDuration瑟捣、android:exitFadeDuration:selector改變狀態(tài)時淡入淡出
  80. getResources().getDimension(R.dimen.xxx)獲取的值并不一定是dimens.xml中定義的,其值受屏幕密度影響
  81. Fragment instantiate():用給定的類名創(chuàng)建一個新的Fragment對象實例栅干。它跟調(diào)用空的構(gòu)造器一樣
  82. 啟動頁面防止加載白屏設(shè)置activity的theme中的windowbackground="@null"
  83. 如果讓應(yīng)用生成的數(shù)據(jù)不被媒體庫掃描到迈套,在生成數(shù)據(jù)的文件夾下創(chuàng)建一個名為".nomedia"的隱藏文件,避免出現(xiàn)一些無意義的文件也被媒體庫掃描到的情況
  84. Fragment本質(zhì)上是嵌入在Activity中一個ViewGroup的View碱鳞,但是谷歌給這個View賦予了生命周期
  85. overridePendingTransition(0, 0):Activity過渡無動畫 桑李,start和finish后面調(diào)用
  86. MotionEvent中g(shù)etX() getRawX()區(qū)別:前者是相對于View左上角的X坐標(biāo),后者是相對于屏幕左上角的X坐標(biāo)
  87. getLocationInWindow():控件在其父窗口中的坐標(biāo)位置 窿给、 getLocationOnScreen:控件在其整個屏幕上的坐標(biāo)位置贵白,onWindowFocusChanged ()之后才能使用
  88. getLocalVisibleRect():獲取View自身可見的坐標(biāo)區(qū)域、getGlobalVisibleRect():獲取View在屏幕絕對坐標(biāo)系中的可視區(qū)域崩泡,onWindowFocusChanged ()之后才能使用
  89. StartAnimation():立即開啟動畫效果禁荒、SetAnimation():開啟動畫效果需要其父類調(diào)用invalidate()
  90. setWillNotDraw(true):當(dāng)自定義View繼承自 ViewGroup 、且本身并不具備任何繪制時角撞,設(shè)置為 true 后呛伴,系統(tǒng)會進行相應(yīng)的優(yōu)化
  91. android:baselineAligned="false":當(dāng)LinerLayout的子View都是ViewGroup(自定義控件除外)時勃痴,子View已經(jīng)不需要基準(zhǔn)線對齊了,false可以提高性能
  92. invalidateOptionsMenu():在同一Activity不同F(xiàn)ragment需要顯示不同的Menu的热康,調(diào)用該方法刷新Menu
  93. setTranscripMode(): 設(shè)置只要ListView刷新就會滑動
  94. TextView設(shè)置了TextUtils.TruncateAt.MARQUEE沛申,layout_height 不要設(shè)置MATCH_PARENT或者WRAP_CONTENT,否則焦點會有問題
  95. 監(jiān)聽USB插拔靜態(tài)廣播需要加改過濾 <data android:scheme="file"/>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褐隆,一起剝皮案震驚了整個濱河市污它,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庶弃,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德澈,死亡現(xiàn)場離奇詭異歇攻,居然都是意外死亡,警方通過查閱死者的電腦和手機梆造,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門缴守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镇辉,你說我怎么就攤上這事屡穗。” “怎么了忽肛?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵村砂,是天一觀的道長。 經(jīng)常有香客問我屹逛,道長础废,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任罕模,我火速辦了婚禮评腺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淑掌。我一直安慰自己蒿讥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布抛腕。 她就那樣靜靜地躺著芋绸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兽埃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天柄错,我揣著相機與錄音舷夺,去河邊找鬼苦酱。 笑死,一個胖子當(dāng)著我的面吹牛给猾,可吹牛的內(nèi)容都是我干的疫萤。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼敢伸,長吁一口氣:“原來是場噩夢啊……” “哼扯饶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起池颈,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤尾序,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后躯砰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體每币,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年琢歇,在試婚紗的時候發(fā)現(xiàn)自己被綠了兰怠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡李茫,死狀恐怖揭保,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魄宏,我是刑警寧澤秸侣,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站娜庇,受9級特大地震影響塔次,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜名秀,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一励负、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匕得,春花似錦继榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至考阱,卻和暖如春翠忠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乞榨。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工秽之, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留当娱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓考榨,卻偏偏與公主長得像跨细,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子河质,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,858評論 25 707
  • EnglishVersion ->_->:https://github.com/jiang111/awesome-...
    聶順閱讀 1,223評論 0 4
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程冀惭,因...
    小菜c閱讀 6,375評論 0 17
  • 煙花散休,終于在昨夜涼了。那美淫半,傾盡妖嬈溃槐,卻終歸于煙消云散。 每一天科吭,煙火如常。只是猴鲫,越來越喜歡安靜对人。安靜守候著四季常...
    美文小屋閱讀 236評論 0 0
  • 【友盟+】產(chǎn)品總監(jiān)陸義元在“數(shù)據(jù)化運營”論壇上牺弄,作了“網(wǎng)紅盛行,用戶到粉絲如何轉(zhuǎn)變”的主題分享宜狐。 陸義元認(rèn)為势告,移動...
    李小小_小小閱讀 135評論 0 0