編輯:關於Android編程
當一個Android程序啟動時,Android系統會同時啟動一個對應的主線程(Main Thread)。
由於這個主線程(Main Thread)主要的任務就是對UI相關的事件進行處理(例如顯示文本,處理點擊事件,顯示圖片等),系統對每一個組件的調用都是從主線程中分發出去的,所以又常被稱為UI線程。
IMP,Android單線程模型的核心原則就是:只能在UI線程(Main Thread)中對UI進行處理。
為了提高Performance,Android對UI處理的相關method都不是synchronized,所以當你試圖用其他線程來對UI進行操作時,會拋出如下異常:
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
當然,這並非鼓勵我們將一切操作都放在UI線程當中進行。
有些十分費時但對UI更新影響很小的操作(如網絡操作,數據庫操作等),若一起放在UI線程當中去進行的話,會導致UI Performance十分poor,對的,非常非常poor,甚至彈出ANR(Application Not Responding)窗口,這無疑對用戶是十分不友好的。
Ps:據我所知,Android SDK在4.0版本之後就不支持在Main Thread中直接進行網絡相關操作,除非你厚顏無恥地在主線程中加上如下代碼:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath() .build());
因此,Android單線程模型的原則總結起來大致有兩點:
1.只能在UI線程(Main Thread)中對UI進行處理,不要在UI線程之外訪問Android UI toolkit
2.不要用費時的操作阻塞UI線程
關於如何處理好Android程序中的多線程,可以參考Android官方training:
Sending Operations to Multiple Threads.
Async-httpclient是一個用於Android應用程序開發的http訪問開源框架,開源在GitHub上,由於今天在GitHub上沒有看到下載地址,我這裡提供一個
一,Activity生命周期相信不少朋友也已經看過這個流程圖了,也基本了解了Activity生命周期的幾個過程,我們就來說一說一些常見操作的生命周期執行情況吧(1) 啟動
概念應用的開發離不開存儲,存儲分為網絡、內存、SDCard文件存儲以及外部SDCard2文件存儲,開發中一定要注意好內存管理以免oom、卡頓等不好的用戶體驗,同時還要注意
在Android 的程序中設置項可以說是一個必須要有的頁面。下面說一下如何寫一個基本的設置頁面。我們先來看一下常用安卓程序的設置頁面: