編輯:關於Android編程
1> 管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖view上。
2> 管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。
3> 用戶自定義渲染器(render)。
4> 讓渲染器在獨立的線程裡運作,和UI線程分離。
5> 支持按需渲染(on-demand)和連續渲染(continuous)。
6> 一些可選工具,如調試。
他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的名是String類型,而值都是基本類型
首先,looper、handler、messagequeue三者共同實現了android系統裡線程間通信機制。如在A、B兩個子線程之間需要傳遞消息,首先給每個子線程綁定一套handler、looper、messagequeue機制,然後這三個對象都與其所屬線程對應。然後A線程通過調用B線程的Handler對象,發送消息。這個消息會被Handler發送到B線程的messagequeue中,而屬於B線程的Looper對象一直在for循環裡無限遍歷MessageQueue, 一旦發現該消息隊列裡收到了新的消息,就會去對消息進行處理,處理過程中會回調自身Handler的heandleMessage方法。從而實現了不同線程間通信。
Looper類裡包含一個消息隊列對象和一個線程對象。當創建Looper時,會自動創建一個消息隊列,同時將內部線程對象指向創建Looper的線程。當開啟Looper後(looper.loop()),會自動進入無限for循環中,不斷去遍歷消息隊列,如果沒有消息則阻塞,有消息則回調handler的handlemessage方法進行處理。
首先,要使用Looper機制一般會在當前線程中創建Handler對象,裡面會自動創建一個looper對象和消息隊列,這裡面的消息隊列屬於當前線程空間。但此時的looper還不會去遍歷,也沒有綁定到當前線程。其中,looper對象內部也包含一個空消息隊列對象和空線程。通過Looper.prepare()方法,先讓該消息隊列指向當前線程的消息隊列,讓空線程也指向當前線程。從而實現了綁定。
主要有三種方法,一為Handler,二為AsyncTask,三為自己開子線程執行耗時操作,然後調用Activity的runOnUiThread()方法更新ui;
handler機制是,在主線程中創建handler對象,
當執行耗時操作時,新建一個線程,在這個線程中執行耗時操作,通過調用handler的sendMessage,post等方法,更新ui界面;
AsyncTask本質上是一個線程池,所有的異步任務都會在這個線程池中的工作線程中執行,當需要操作ui界面時,會和工作線程通過handler傳遞消息。
自己開子線程執行耗時操作,然後調用Activity的runOnUiThread()方法更新ui,這種方法需要把context對象強制轉換成activity後使用
handler機制的優點是 結構清晰,功能明確,但是代碼過多;
asyncTask簡單,快捷,但是可能會新開大量線程,消耗系統資源,造成FC
第三種方法最好用,代碼也非常簡單,只是需要傳遞context對象
最近想把學習Android過程中的Handler使用經驗寫下來,供自己以後查看,也與大家一起分享。使用Handler其實不得不與Android中的線程或者說Java中的多
本文實例講述了Android實現向Launcher添加快捷方式的方法。分享給大家供大家參考。具體如下:當我們在應用程序Launcher的桌面空白處長按觸摸時,會出現一個對
一.Service簡介service可以說是一個在後台運行的Activity,它不是一個單獨的進程,它只需要應用告訴它要在後台做什麼就可以了,它要實現和用戶的交互的話需要
對於想要攔截一些莫名的陌生號碼,就需要電話攔截功能與刪除其電話記錄功能。攔截的主要業務邏輯,分別是在一個服務裡面進行:1、注冊電話監聽;2、取消注冊電話監聽(當然注冊於取