編輯:Android編程入門
在一個Android 程序開始運行的時候,會單獨啟動一個Process。默認的情況下,所有這個程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種,除此之外還有Content Provider和Broadcast Receiver)都會跑在這個Process。
一個Android 程序默認情況下也只有一個Process,但一個Process下卻可以有許多個Thread。
在這麼多Thread當中,有一個Thread,我們稱之為UI Thread。UI Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main Thread,主要是負責控制UI界面的顯示、更新和控件交互。在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一 個線程中運行。因此,我們認為,UI Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網絡,下載數據,查詢數據庫等),都應該交由子線程去執行, 以免阻塞主線程。
那麼,UI Thread如何和其他Thread一起工作呢?常用方法是:
誕生一個主線程的Handler物件,當做Listener去讓子線程能將訊息Push到主線程的Message Quene裡,以便觸發主線程的handlerMessage()函數,讓主線程知道子線程的狀態,並在主線程更新UI。
例如,在子線程的狀態發生變化時,我們需要更新UI。如果在子線程中直接更新UI,通常會拋出下面的異常:
11-07 13:33:04.393: ERROR/JavaBinder(1029):android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.
意思是,無法在子線程中更新UI。為此,我們需要通過Handler物件,通知主線程Ui Thread來更新界面。
還有一個我們遇到的常見問題,會拋出下面的異常:
Can't create handler inside thread that has not called Looper.prepare()
意思是,在子線程中創建handler對象而又沒有關聯Looper對象。
例子是從《Android系統源代碼情景分析》第二章抄過來的,在學習的過程中還是遇到了不少的問題。個人體會:在學習第二章之前應該把《Linux設備驅動程序》這本書至少前四章
這幾天在回顧Android的基礎知識,就把一些常見的知識點整理一下,以後忘了也可以翻出來看一看。簡單介紹一下Activity的生命周期在API文檔中對生命周期回調的函數描
信號量,了解過操作系統的人都知道,信號量是用來做什麼的···在Android中,已經提供了Semaphore來幫助我們使用~那麼
Android項目的目錄結構: 資源文件夾:清單配置文件:Android的四大組件在使用前全部需要在清單文件中配置<?xml version