本文均為Android常用知識點厅贪,搜集整理以供復(fù)習(xí)參考
Java知識點總結(jié),請點我
1. 常用的布局有哪些?
FrameLayout蚤蔓,LinearLayout卦溢,RelativeLayout,AbsoluteLayout秀又,GridLayout
CoordinatorLayout(協(xié)調(diào))单寂,AppBarLayout,CollapsingToolbarLayout的一些相關(guān)屬性
2. 內(nèi)存泄漏的檢測吐辙、幾種常見場景及解決方法
場景一:靜態(tài)變量持有了Activity
場景二:匿名內(nèi)部類或非靜態(tài)內(nèi)部類引起的內(nèi)存泄漏
場景三:Handler.sendMessageDelayed
場景四:Static Views
場景五:無限循環(huán)的屬性動畫
adb shelldumpsys meminfo (pid name)
查看activities數(shù)目
排查內(nèi)存泄漏最簡單和直觀的方法
Android Studio-->monitor memory -->dump java head--> *.hprof
3. 使用TraceView來進行性能調(diào)優(yōu)
Android Studio-->monitor --->CPU -->start method trace-->*.trace
Android 性能優(yōu)化:使用 TraceView 找到卡頓的元兇
4. MVC/MVP/MVVM應(yīng)用架構(gòu)設(shè)計
Android中MVP設(shè)計使用(與MVC區(qū)別)
如何構(gòu)建Android MVVM應(yīng)用程序(Databinding)
1 ViewModel與View的協(xié)作
2 ViewModel與Model的協(xié)作
3 ViewModel與ViewModel的協(xié)作
https://developer.android.com/topic/libraries/data-binding/index.html
5. SurfaceView TextureView View區(qū)別
SurfaceView與View的區(qū)別和使用場景
SurfaceView和TextureView區(qū)別分析
6. Android activity的生命周期
7. Activity&Fragment生命周期解析
8. Activity 定義啟動模式
standard宣决、singleTop、singleTask昏苏、singleInstance and FLAG_ACTIVITY_NEW_TASK
9. Android View重繪和更新: invalidate和requestLayout
10. 系統(tǒng)上安裝了多種瀏覽器恤筛,能否指定某瀏覽器訪問指定頁面
Intent intent =newIntent();
intent.setAction("android.intent.action.VIEW");
Uri content_url =Uri.parse("http://www.163.com");
intent.setData(content_url);
//指定瀏覽器的包名類名
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent);
11. ANR和Force close產(chǎn)生和原因
- ANR官还,程序沒有響應(yīng),有可能程序會再次響應(yīng)
例子:應(yīng)用運行時毒坛,Main線程進行了耗時操作;應(yīng)用運行時望伦,用戶操作過于頻繁
Force close:程序拋出異常,應(yīng)用停止運行粘驰,會強制退出
例子:應(yīng)用運行時拋出了OutOfMemoryError屡谐,應(yīng)用運行時拋出了RuntimeException - 可以通過Thread.UncaughtExceptionHandler捕獲異常
12. Android 橫豎屏切換(onSaveInstanceState()/onRestoreInstanceState())
- Android 3.2 (API 級別 13)以前
- 不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期蝌数,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次度秘。
- 設(shè)置Activity的android:configChanges="orientation"時顶伞,切屏還是會重新調(diào)用各個生命周期饵撑,切橫、豎屏?xí)r只會執(zhí)行一次唆貌。
- 設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時滑潘,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法锨咙。
- 從 Android 3.2 (API級別 13)開始
- 不設(shè)置Activity的android:configChanges语卤,或設(shè)置Activity的android:configChanges="orientation",或設(shè)置Activity的android:configChanges="orientation|keyboardHidden"酪刀,切屏?xí)匦抡{(diào)用各個生命周期粹舵,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行一次骂倘。
- 配置 android:configChanges="orientation|keyboardHidden|screenSize"眼滤,才不會銷毀 activity,且只調(diào)用 onConfigurationChanged方法历涝。
13. Android的系統(tǒng)架構(gòu)
14. JVM诅需、DVM(Dalvik VM)和ART虛擬機對比
http://blog.csdn.net/evan_man/article/details/52414390
15. [Android中AIDL的使用詳解]
(http://www.reibang.com/p/d1fac6ccee98)
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString);
16. Android進程間通信的幾種方式
- Bundle/Intent傳遞數(shù)據(jù)
- Messenger是基于AIDL實現(xiàn)的,服務(wù)端(被動方)提供一個Service來處理客戶端(主動方)連接荧库,維護一個Handler來創(chuàng)建Messenger堰塌,在onBind時返回Messenger的binder。雙方用Messenger來發(fā)送數(shù)據(jù)分衫,用Handler來處理數(shù)據(jù)场刑。示例
- AIDL通過定義服務(wù)端暴露的接口,以提供給客戶端來調(diào)用示例
- ContentProvider底層也是Binder實現(xiàn)丐箩,主要用來為其他APP提供數(shù)據(jù)[Android 總結(jié):ContentProvider 的使用]
- 在服務(wù)器中定義ServerSocket來監(jiān)聽端口摇邦,客戶端使用Socket來請求端口,連通后就可以進行通信.
17. Android:Touch事件分發(fā)機制
- dispatchTouchEvent方法只負(fù)責(zé)事件的分發(fā)屎勘,當(dāng)返回為true時施籍,順序下發(fā)會中斷。
- 當(dāng)某個View或者ViewGroup的onTouchEvent事件返回true時概漱,便表示它是真正要處理這次請求的View丑慎,之后的Aciton_UP和Action_MOVE將由它處理。
- onInterceptTouchEvent有兩個作用:1.攔截Down事件的分發(fā)瓤摧。2.中止Up和Move事件向目標(biāo)View傳遞竿裂,使得目標(biāo)View所在的ViewGroup捕獲Up和Move事件。
18. Activity布局加載流程
Activity的展示界面的特性是通過Window對象來控制的照弥;
每個Activity對象都對應(yīng)這個一個Window對象腻异,并且Window對象的初始化在啟動Activity的時候完成,在執(zhí)行Activity的onCreate方法之前这揣;
每個Window對象內(nèi)部都存在一個FrameLayout類型的mDector對象悔常,它是Acitivty界面的root view影斑;
Activity中的window對象的實例是PhoneWindow對象,PhoneWindow對象中的幾個成員變量mDector机打,mContentRoot矫户,mContentParent都是View組件,它們的關(guān)系是:mDector –> mContentRoot –> mContentParent –> 自定義layoutView
LayoutInflater.inflate主要用于將布局文件加載到內(nèi)存View組件中残邀,也可以設(shè)定加載到某一個父組件中皆辽;
典型的Activity的onCreate方法中需要調(diào)用super.onCreate方法和setContentView方法,若不調(diào)用super.onCreate方法芥挣,執(zhí)行啟動該Activity的邏輯會報錯驱闷,若不執(zhí)行setContentView的方法,該Activity只會顯示一個空頁面九秀。
其他相關(guān)流程:
19. LruCache緩存類
- LruCache鼓蜒,內(nèi)部使用Map保存內(nèi)存級別的緩存
- LruCache使用泛型可以設(shè)配各種類型
- LruCache使用了Lru算法保存數(shù)據(jù)(最短最少使用least recent use)
- LruCache只用使用put和get方法壓入數(shù)據(jù)和取出數(shù)據(jù)
20. Android Context 是什么痹换?
- Context類是一個抽象類,具體實現(xiàn)在ContextImpl類中都弹;而ContextWrapper是Context的一個包裝類(裝飾器模式)娇豫,其里面所有的方法實現(xiàn)都是調(diào)用其內(nèi)部mBase變量的方法,而mBase就是ContextImpl對象
- ContextThemeWrapper中擴展了主題相關(guān)的方法畅厢。Application和Service是繼承自ContextWrapper冯痢,而Activity是繼承自ContextThemeWrapper(Activity在啟動的時候系統(tǒng)都會加載一個主題)
21. Java開發(fā)中的23種設(shè)計模式詳解
- Application 單例模式
- Broadcast 觀察者模式
- Class.forName 工廠模式
- ContextWrapper 裝飾器模式
- ListView 的Adapter 適配器模式
- new AlertDialog.Builder(this)屬于(建造者)Builder模式
22. AsyncTask 詳解
- 由于Handler需要和主線程交互,而Handler又是內(nèi)置于AsyncTask中框杜,所有AsyncTask的創(chuàng)建必須在主線程浦楣。
- AsyncTaskResult的doInBackground(Params)方法執(zhí)行異步任務(wù)運行在子線程中,其他方法運行在主線程中咪辱,可以操作UI組件振劳。
- 不要手動的去調(diào)用AsyncTask的onPreExecute, doInBackground, publishProgress, onProgressUpdate, onPostExecute方法,這些都是由android系統(tǒng)自動調(diào)用的油狂。
- 一個AsyncTask任務(wù)只能被執(zhí)行一次历恐。
- 運行中可以隨時調(diào)用cancel(boolean)方法取消任務(wù),如果成功調(diào)用isCancel()會返回true专筷,并不會執(zhí)行onPostExecute()弱贼,取而代之的是調(diào)用onCancelled()。從源碼看磷蛹,如果這個任務(wù)已經(jīng)執(zhí)行了這個時候調(diào)用cancel是不會真正的把task結(jié)束吮旅,而是繼續(xù)執(zhí)行,只不過改變的是執(zhí)行之后的回調(diào)方法的onPostExecute還是onCancelled.
23. 淺談PopupWindow在Android開發(fā)中的使用
- 為什么setOutsideTouchable(false)點擊外部區(qū)域還是會關(guān)閉窗口味咳,需要重寫setContentView()鸟辅,重寫setOutsideTouchable():
23. Android 反射機制的理解
Class<?> cls=Class.forName("test.Person");//加載Person類
Object object=(Object) cls.newInstance();//實例化Person
Method setname=cls.getDeclaredMethod("setName", String.class);//獲取setName()方法
setname.invoke(object, "Lipt0n");//設(shè)置調(diào)用setName的對象和傳入setName的值
Method getname=cls.getDeclaredMethod("getName");//獲取getName方法
System.out.print(getname.invoke(object, null));//設(shè)置調(diào)用getName方法的對象.把值打印到控制臺
- 應(yīng)用無法接受廣播匪凉,如果想通過廣播調(diào)用未啟動過的App,自Android3.1開始捺檬,需要加上
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
系統(tǒng)默認(rèn)添加的是:
intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
- 注冊/取消注冊應(yīng)用內(nèi)廣播接收器
localBroadcastManager = LocalBroadcastManager.getInstance(context);
localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);
//取消注冊應(yīng)用內(nèi)廣播接收器
localBroadcastManager.unregisterReceiver(mBroadcastReceiver);
26. Android 動畫總結(jié)
- 序列幀動畫:關(guān)鍵詞
animation-list
再层、AnimationDrawable
- 補間動畫
- xml實現(xiàn)
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim);
view.startAnimation(animation);
- Java Code 實現(xiàn)
animation = new RotateAnimation(-deValue, deValue, Animation.RELATIVE_TO_SELF,
pxValue, Animation.RELATIVE_TO_SELF, pyValue);
view.startAnimation(animation);
- 屬性動畫
ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f);
anim.setDuration(1000);
anim.start();
- ObjectAnimator 這個類,這個類繼承自ValueAnimator
- 屬性動畫才是真正的實現(xiàn)了view的移動堡纬,補間動畫對view的移動更像是在不同地方繪制了一個影子聂受,實際的對象還是處于原來的地方
- 屬性動畫會導(dǎo)致Activity無法釋放而導(dǎo)致內(nèi)存泄漏,而補間動畫卻沒有問題
27. ...
28. 圖片加載框架
Universal-Image-Loader完全解析(一)--- 基本介紹及使用
Universal-Image-Loader完全解析(二)--- 圖片緩存策略詳解
Universal-Image-Loader完全解析(三)---源代碼解讀
29. H5 App開發(fā) WeX5
30. 數(shù)據(jù)庫安全
WCDB(https://github.com/Tencent/wcdb)是一個高效烤镐、完整蛋济、易用的移動數(shù)據(jù)庫框架,基于SQLCipher炮叶,支持iOS, macOS和Android碗旅。
31. 曲線圖 MPAndroidChart 教程
- MPAndroidChart 教程:概述
- MPAndroidChart 教程:開始 Getting Started(一)
- MPAndroidChart 教程:與圖表進行手勢交互 Interaction with the Chart(二)
- MPAndroidChart 教程:坐標(biāo)軸,X軸镜悉,Y軸祟辟,Labels(三)
- MPAndroidChart 教程:設(shè)置數(shù)據(jù),設(shè)置顏色(四)
- MPAndroidChart 教程:數(shù)據(jù)格式器 ValueFormatter(五)
- MPAndroidChart 教程:圖表的具體設(shè)置 Specific chart settings(六)
- MPAndroidchart 教程:圖例 Legend(七)
- MPAndroidChart 教程:動態(tài)和實時數(shù)據(jù) Dynamic & Realtime Data(八)
- MPAndroidChart 教程:修改視窗 Modifying the Viewport(九)
- MPAndroidChart 教程:動畫 Animations(十)
- MPAndroidChart 教程:MarkerView(十一)
- MPAndroidChart 教程:ChartData類侣肄,ChartData子類旧困, DataSet類,DataSet子類(十二)
32. Android中的Apk的加固(加殼)原理解析和實現(xiàn)
參考文章