android如何提升性能技巧(下)
1.什么是TraceView?
先看下百度出來的解釋吧:
// start tracing to "/sdcard/yourActivityTrace.trace"
Debug.startMethodTracing("yourActivityTrace");
// ... stop tracing
Debug.stopMethodTracing();
之后就可以看到圖形了,接下來就是按照Google Dev Guide中的解釋去分析圖形就OK了。
下面來看如何實(shí)現(xiàn)以及需要注意的地方:
實(shí)現(xiàn)的步驟分為三步:1.必須先在我們的模擬器中創(chuàng)建sdCard ;2.將我們的調(diào)試代碼嵌入工程;3.利用TraceView來觀察和分析代碼情況;
1.對于創(chuàng)建模擬器的sdCard這里寫出兩種方式:
2.將我們的調(diào)試代碼嵌入工程
1
2
3 package="com.himi"
4 android:versionCode="1"
5 android:versionName="1.0">
6
7 8 android:label="@string/app_name"> 9 10 11 12 13
14
15
16
17
3.運(yùn)行項(xiàng)目并且退出項(xiàng)目從而得到的追蹤文件,利用TraceView來進(jìn)行分析代碼運(yùn)行狀況:
18
22 public void hot(Canvas canvas) {
23 for (int i = 1; i < 100; i++) {
24 Bitmap bmp = BitmapFactory.decodeResource(getResources(),
25 R.drawable.icon);
26 canvas.drawBitmap(bmp, i += 2, i += 2, paint);
27 }
28 }
2.listview 性能優(yōu)化
1).復(fù)用convertView
2).異步加載圖片
3).快速滑動時不顯示圖片
4).BaseAdapter避免內(nèi)存溢出
如果BaseAdapter的實(shí)體類有屬性非常消耗內(nèi)存,可以將保存到文件;為提高性能,可以進(jìn)行緩存,并限制緩存大小。
3.使用線程池
分為核心線程池和普通線程池,下載圖片等耗時任務(wù)放置在普通線程池,避免耗時任務(wù)阻塞線程池后,導(dǎo)致所有異步任務(wù)都必須等待
4.異步任務(wù)
分為核心任務(wù)和普通任務(wù),只有核心任務(wù)中出現(xiàn)的系統(tǒng)級錯誤才會報錯,異步任務(wù)的ui操作需要判斷原activity是否處于激活狀態(tài)
5.盡量避免static成員變量引用資源耗費(fèi)過多的實(shí)例,比如Context
6.使用WeakReference代替強(qiáng)引用
弱引用可以讓您保持對對象的引用,同時允許GC在必要時釋放對象,回收內(nèi)存。對于那些創(chuàng)建便宜但耗費(fèi)大量內(nèi)存的對象,即希望保持該對象,又要在應(yīng)用程序需要時使用,同時希望GC必要時回收時,可以考慮使用弱引用。
7.超級大胖子Bitmap
8.保證Cursor 占用的內(nèi)存被及時的釋放掉,而不是等待GC來處理。
并且 Android明顯是傾向于編程者手動的將Cursor close掉
9.線程也是造成內(nèi)存泄露的一個重要的源頭。
線程產(chǎn)生內(nèi)存泄露的主要原因在于線程 生命周期的不可控
10.如果ImageView的圖片是來自網(wǎng)絡(luò)
進(jìn)行異步加載
11.應(yīng)用開發(fā)中自定義View
應(yīng)用開發(fā)中自定義View的時候,交互部分,千萬不要寫成線程不斷刷新界面顯示,而是根據(jù)TouchListener事件主動觸發(fā)界面的更新
12.Drawable
13.復(fù)用、回收Activity對象
臨時的activity及時finish主界面設(shè)置為singleTask一般界面設(shè)置為singleTop
14.獲取地理位置信息
位置信息獲取用戶的地理位置信息時,在需要獲取數(shù)據(jù)的時候打開GPS,之后及時關(guān)閉掉
15.電源管理
在onResume時設(shè)置該界面的電源管理,在onPause時取消設(shè)置
16.android內(nèi)存優(yōu)化
android因其系統(tǒng)的特殊性,安裝的軟件默認(rèn)都安裝到內(nèi)存中,所以隨著用戶安裝的軟件越來越多,可供運(yùn)行的程序使用的內(nèi)存越來越小,這就要求我們在開發(fā)android程序時,盡可能的少占用內(nèi)存。根據(jù)我個人的開發(fā)經(jīng)驗(yàn)總結(jié)了如下幾點(diǎn)優(yōu)化內(nèi)存的方法:
創(chuàng)建或其他方式獲得的對象如不再使用,則主動將其置為null。
盡量在程序中少使用對圖片的放大或縮小或翻轉(zhuǎn).在對圖片進(jìn)行操作時占用的內(nèi)存可能比圖片本身要大一些。
盡可能的將一些靜態(tài)的對象(尤其是集合對象),放于SQLite數(shù)據(jù)庫中。并且對這些數(shù)據(jù)的搜索匹配盡可能使用sql語句進(jìn)行。
一些連接資源在不使用使應(yīng)該釋放,如數(shù)據(jù)庫連接文件輸入輸出流等。應(yīng)該避免在特殊的情況下不釋放(如異?;蚱渌闆r)
一些長周期的對像引用了短周期的對象,但是這些短周期的對象可能只在很小的范圍內(nèi)使用。所以在查內(nèi)存中也應(yīng)該清除這一隱患。
一個對象被多個對象引用,但是只釋放了一處,也可能會導(dǎo)致這個對像不會被釋放。
Android
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。