Intent,好比撥打電話 ContentProvider 數據庫存儲數據 Broadcast 廣播通訊 AIDL通訊,經過接口共享數據java
wait是Object的方法,wait是對象鎖,鎖定方法不讓繼續執行,當執行notify方法後就會繼續執行,sellp是Thread的方法,sellp是使線程睡眠,讓出cpu,結束後自動繼續執行數據庫
String不可改變對象,一旦建立就不能修改編程
String str="aaa";
str="bbb";
複製代碼
以上代碼雖然改變了str,可是執行過程是回收str,把值賦給一個新的str StringBuffer建立以後,能夠去修改 StringBuilder也可修改,執行效率高於StringBuffer,不安全 當字符賦值少使用String 字符賦值頻繁使用StringBuilder 當多個線程同步操做數據,使用StringBuffercanvas
View基於主線程刷新UI,SurfaceView子線程又能夠刷新UI緩存
View爲全部圖形控件的基類,View的繪製由3個函數完成 measure,計算視圖的大小 layout,提供視圖要顯示的位置 draw,繪製安全
是java和c語言之間的橋樑,因爲java是一種半解釋語言,能夠被反編譯出來,一種重要涉及安全的代碼就使用了C編程,再者不少底層功能調用C語言都實現了Java不必重複造輪子,因此定義了JNI接口的實現性能優化
TCP是通過3次握手,4次揮手完成一串數據的傳送 UDP是無鏈接的,知道IP地址和端口號,向其發送數據便可,無論數據是否發送成功 Socket是一種不一樣計算機,實時鏈接,好比說傳送文件,即時通信bash
整體來講,分爲幾個類 視頻錄製方面,Camear攝像頭錄製視頻類,MediaProjection屏幕錄製視頻類 編碼方面,MediaCodec,MediaRecorder 預覽方面,SurfaceView,GLSurfaceView,TextureView,VideoView多線程
概念:進程包括多個線程,一個程序一個進程,多線程的優勢能夠提升執行效率,提升資源利用率 建立:Thread類和Runnable接口, 經常使用方法有:框架
start()用於啓動線程
run()調用線程對象中的run方法
join()合併插隊到當前線程
sellp()睡眠釋放cpu資源
setPriority()設置線程優先級
**概念:**有些對象只有有限的生命週期,當他們的任務完成以後,它們將被垃圾回收,若是在對象的生命週期本該結束的時候,這個對象還被一系列的引用,着就會致使內存泄露。 解決方法:使用開源框架LeakCanary檢測針對性解決
常見的內存泄露有: 單例形成的內存泄露,例如單例中的Context生命週期大於自己Context生命週期 線程使用Hander形成的內存卸扣,當activity已經結束,線程依然在運行更新UI 非靜態類使用靜態變量致使沒法回收釋放形成泄露 WebView網頁過多形成內存泄露 資源未關閉形成泄露,例如數據庫使用完以後關閉鏈接
View的事件傳遞順序有3個重要的方法,dispatchTouchEvent()是否消耗了本次事件,onInterceptTouchEvent()是否攔截了本次事件,onTouchEvent()是否處理本次事件,滑動衝突分爲同方向滑動衝突,例如ScrollView和ListView,同方向滑動衝突,能夠計算ListView高度而動態設置ListView的高度,ScrollView高度可變。例如ViewPager和ListView,不一樣方向滑動衝突,一個是橫向滑動一個是豎直滑動,不一樣方向滑動能夠判斷滑動的x,y軸是橫向仍是豎直滑動,若是判斷獲得是橫向滑動,就攔截ListView的事件,豎則反之。
緩存上:前者緩存的是View+ViewHolder+flag,不用每次調用findViewById,後者則只是緩存View 刷新數據方面,前者提供了局部刷新,後者則所有刷新
設置預加載的數量LinearLayoutManager.setInitialPrefetchItemCount(4),默認是預加載2個, 設置子項緩存,設置自帶滑動衝突解決屬性rv.setHasFixedSize(true); rv.setNestedScrollingEnabled(false); 能夠完美解決,不過Google不推薦RecyClerView嵌套使用,須要嵌套儘可能找相似於ExpandableListView 第三方控件來解決
MVC:View是能夠直接訪問Model的!從而,View裏會包含Model信息,不可避免的還要包括一些 業務邏輯。 在MVC模型裏,更關注的Model的不變,而同時有多個對Model的不一樣顯示,及View。因此,在MVC模型裏,Model不依賴於View,可是 View是依賴於Model的。不只如此,由於有一些業務邏輯在View裏實現了,致使要更改View也是比較困難的,至少那些業務邏輯是沒法重用的。
MV:MVP 是從經典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數據,View負 責顯示。做爲一種新的模式,MVP與MVC有着一個重大的區別:在MVP中View並不直接使用Model,它們之間的通訊是經過Presenter (MVC中的Controller)來進行的,全部的交互都發生在Presenter內部,而在MVC中View會從直接Model中讀取數據而不是經過 Controller。
MVVM:數據雙向綁定,經過數據驅動UI,M提供數據,V視圖,VM即數據驅動層
Dagger2是一個主要用於依賴注入的框架,減小初始化對象操做,下降耦合度
佈局優化 :減小布局層級,使用ViewStub提升顯示速度,佈局服用,儘量少使用warp_content,刪除空間中無用的屬性,避免過分繪製移除window默認背景,按需顯示展位圖,自定義View優化,使用canvas.clipRect()識別可見區域
啓動速度:採用分佈加載,異步加載,延期加載提升應用初始化速度,採用線程初始化數據等,合理的刷新機制
內存方面:防止內存泄露,使用一些第三方工具檢測解決
代碼優化:遵循Java生命週期
安裝包優化:刪除無用資源,優化圖片,代碼混淆,避免重複庫存在,插件化
Handler,loop輪詢檢測發送消息到MessagerQuery,MessageQuery對Message入列,Handler回調方法處理消息,重寫handMessage方法刷新ui
在兩個應用的manifest配置中好相同的shartdUserId屬性,A應用正常保存數據,B應用 createPackageContext("com.netease.nim.demo", CONTEXT_IGNORE_SECURITY) 獲取context而後獲取應用數據,爲保證數據安全,使用加密存儲
判手機系統,小米使用小米推送,華爲使用華爲推送,其餘手機使用友盟推送
經過Bundle傳值,在activty定義變量傳值,擴展fragment建立傳值
後續會持續更新Android專題知識,你們以爲不錯能夠點個贊在關注下,之後還會分享更多文章!