Android進(jìn)階實(shí)錄1

APP性能優(yōu)化:

1:界面布局優(yōu)化

在開發(fā)者選項(xiàng)中可以開啟界面過(guò)渡繪制預(yù)覽,查看自己app界面繪制使用情況,一般從輕到高的級(jí)別為:藍(lán)-綠-淡紅-深紅.優(yōu)化如下:

a:一般在布局進(jìn)行setContentView(R.id.Layout)時(shí)候,布局至少會(huì)執(zhí)行兩層繪制,一個(gè)是window窗口的繪制,一個(gè)是自身layout的繪制,這里在繪制自身layout時(shí)候可以將window繪制去除掉,getWindow().setBackgroundDrawableResouce(R.id.translater).

b:多采用viewstup,merge,include標(biāo)簽,多采用RelateveLayout替代LinearLayout.

2:apk瘦身

大多數(shù)是圖片資源導(dǎo)致apk偏大,這里可以減少圖片的大小(tinypng)

3:啟動(dòng)界面優(yōu)化(冷啟動(dòng)熱啟動(dòng))

在進(jìn)入里面時(shí)候,如果在代碼onCreate中加載Layout,當(dāng)Layout布局過(guò)大時(shí)候,就會(huì)加載很慢,這里可以用冷啟動(dòng)的方式,在manifast.xml中給當(dāng)前的activity指定出Theme,在Theme中給定加載的圖片信息,大大提高啟動(dòng)速度.

熱啟動(dòng):在已存在中加載數(shù)據(jù),不會(huì)重新創(chuàng)建Application,直接走M(jìn)ainActivity中oncreate()

冷啟動(dòng):會(huì)重新創(chuàng)建各種初始化Application

4:內(nèi)存

當(dāng)內(nèi)存爆滿的時(shí)候也會(huì)導(dǎo)致界面卡頓,大部分GC調(diào)用時(shí)候不能夠及時(shí)回收資源,所以這里就算手動(dòng)調(diào)用System.GC也是無(wú)法達(dá)到收到的效果,這里需要具體分析需要回收的資源,一般在onDestory()中將bitmap,brodcastRecver,handle等回收.如果當(dāng)前的activity銷毀了,而handle還在繼續(xù)loop輪詢接收響應(yīng)消息,那么很可能會(huì)導(dǎo)致oom,一般handle中應(yīng)當(dāng)有一個(gè)對(duì)當(dāng)前activity的弱引用對(duì)象.

第二點(diǎn),在onsaveInstance中保存上次資源,下次進(jìn)入前優(yōu)先從里面取值.

5:網(wǎng)絡(luò)

一般網(wǎng)絡(luò)請(qǐng)求都是比較耗時(shí)的操作,這里如果界面上需要馬上顯示出數(shù)據(jù),不能讓用戶等待的話,可以采用緩存數(shù)據(jù).每次進(jìn)入界面時(shí)候從緩存中取值,然后重新獲取數(shù)據(jù),將網(wǎng)絡(luò)數(shù)據(jù)重新填充到緩存SP中.

6:代碼結(jié)構(gòu)

a:避免創(chuàng)建不必要的對(duì)面,節(jié)省內(nèi)存開銷

b:合理使用static,長(zhǎng)期占用內(nèi)存

c:合理使用浮點(diǎn)型(比int型慢2倍)

d:多使用public代替private,以便私有類高效的訪問(wèn)外部成員.

f:避免內(nèi)部的get,set方法,因?yàn)镾tudent.count比Student.getCount快7倍.

緩存:

1:網(wǎng)絡(luò)

從網(wǎng)絡(luò)直接獲取文件

2:本地

保存在本地sdcard

3:內(nèi)存

LruCache,linkedHashMap<key,value>,bitmap對(duì)象,弱引用

LRUCache(近期最少使用算法),通過(guò)likedHashMap,LinkedHashMap集成與HashMap,采用雙向鏈表的形式,通過(guò)put,get,remove操作,當(dāng)插入值時(shí)在鏈表最底端,當(dāng)緩存達(dá)到最大值時(shí)候remove頂端map中的bitmap緩存對(duì)象.

強(qiáng)引用軟引用弱引用虛引用

強(qiáng)引用:如 Student s=new Student();

一直存在,即使GC也不會(huì)被回收,程序拋出異常.

軟引用,弱引用:

softPrefrece,weakPrefreces,當(dāng)內(nèi)存不足時(shí)候,自動(dòng)回收對(duì)象

虛引用:

phantomPrefrece,觸發(fā)GC立即回收,可以用來(lái)判斷對(duì)象為null判斷是否被回收

ImageLoader,picsso,glide異同

ImageLoader:使用比較繁瑣,緩存機(jī)制沒(méi)有和http很好的結(jié)合,不支持gif圖片加載.

picsso:使用比較簡(jiǎn)單,一行代碼實(shí)現(xiàn),但是緩存的是RGB_8888,圖片緩存的不是壓縮圖

,不支持gif圖片加載.

glide:picsso的升級(jí)版,緩存的是縮略圖,支持gif,同時(shí)支持本地視頻類型的圖片加載.(支持格式:/sdcard/mnt/aaa.mp4,不支持:http://ssss.mp4).


圖片壓縮方法

1:質(zhì)量壓縮

質(zhì)量壓縮是不改變圖片的高度和寬度和分辨率,通過(guò)改變圖片的深度和位度來(lái)進(jìn)行壓縮,輸出后的圖片大小沒(méi)有改變,只是byte.length變小,用于傳遞二進(jìn)制時(shí)候使用(微信分享圖片).

2:采樣率壓縮

通過(guò)bitmaFactory.decode(option)來(lái)實(shí)現(xiàn),Option中設(shè)置inSampleSize=2,為原來(lái)的1/2,來(lái)進(jìn)行壓縮.會(huì)改變寬度和高度.

3:matrax縮放壓縮

bitmapFactory.createBitmap.通過(guò)縮放高度和寬度進(jìn)行壓縮.

mvc,mvp:

mvc傳統(tǒng)的架構(gòu)模式,m:model層負(fù)責(zé)數(shù)據(jù)的處理,v:view視圖層展現(xiàn),c:controller控制層,負(fù)責(zé)業(yè)務(wù)邏輯處理.

mvp:m數(shù)據(jù)存儲(chǔ)層,v:視圖層,p:persenter

將v和m分開,不能直接訪問(wèn),persenter通過(guò)接口的形式控制.

app打包流程:

1:打包資源文件,生成R.java文件

2:打包aidl(跨進(jìn)程訪問(wèn))文件,生成響應(yīng)java文件

3:編譯java文件,生成class文件

4:轉(zhuǎn)換所有class文件,生成classes.dex文件

5:打出apk&簽名

6:對(duì)apk進(jìn)行對(duì)齊操作.

socket原理:

socket編程中分為兩種實(shí)現(xiàn)方式:

1:tcp

2:udp

tcp,udp異同點(diǎn):

tcp:屬于雙向連接,傳輸速度比較慢,有序的數(shù)據(jù)傳輸,需要三次握手操作,消息接收方失敗后可以得到一個(gè)錯(cuò)誤狀態(tài)值,安全可靠.

udp:在new Socket之后joinGroup就可以發(fā)送數(shù)據(jù),不需要accpet,傳輸速度快,適合數(shù)據(jù)量小的場(chǎng)景.

傳送門,記得當(dāng)時(shí)開發(fā)時(shí)候,服務(wù)端的ip需要和客戶端一致,但是port不能一致,不然發(fā)不了數(shù)據(jù).

注解反射:

反射:

Student stu1=new Student();

Class clz=stu1.getClass();

clz.getClassName();

Class stu=Student.Class();

Class stu=Class.forName("包名+類名");


堆棧常量池:

如圖:

常量池
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容