1. 繪制優(yōu)化
卡頓原因:16ms需要繪制一幀,如果主線程操作過多宛徊,會導(dǎo)致vsync到來時數(shù)據(jù)沒有準(zhǔn)備號,導(dǎo)致丟幀逻澳,應(yīng)用卡頓闸天。
overdraw : 不設(shè)置不必要的背景, cliprect繪制可見部分
減少層級斜做,使用merge/include/stub
不要主線程做耗時操作
內(nèi)存使用不當(dāng)苞氮,頻繁gc,影響主線程執(zhí)行
工具: HirearchyView陨享、Systrace葱淳、TraceView、GPU profile
2. 內(nèi)存優(yōu)化
android gc:gc類型抛姑,gc算法赞厕、堆分配。
使用合理的數(shù)據(jù)結(jié)構(gòu)定硝,例如SparseArrary系列(key為整型)皿桑,arraymap代替hashmap
少使用枚舉
頻繁分配的可以創(chuàng)建線程池,要避免內(nèi)存泄漏
不要在ondraw做分配對象
對bitmap的使用蔬啡,注意使用insamplesize诲侮,inbitmap,rgb格式箱蟆。
注意圖片資源放置的位置沟绪。
使用完的ui資源圖片設(shè)置為null。
3. 內(nèi)存泄漏
原因:資源未釋放(cursor, file, 廣播)空猜,listenter未解注冊绽慈,靜態(tài)變量,內(nèi)部類辈毯,handler坝疼,長時間運行的后臺線程。
解決:heap dumper谆沃,mat. 關(guān)注大對象钝凶,activity,fragment唁影。使用select語句耕陷,使用兩次內(nèi)存對比圖等。