編輯:關於Android編程
android裡面對於異步消息的處理,提供了一套Handler的實現方案。Handler有很多適宜的應用和微妙之處,使它在和Thread以及Service等一起使用的時候達到很好的效果。
一. Handler與Thread的區別。Handler與調用者處於同一線程,如果Handler裡面做耗時的動作,調用者線程會阻塞。Android UI操作不是線程安全的,並且這些操作必須在UI線程中執行。Android提供了幾種基本的可以在其他線程中處理UI操作的方案,包括Activity 的runOnUiThread(Runnable),View的post以及1.5版本的工具類AsyncTask等方案都采用了 Handler,Handler的post對線程的處理也不是真正start一個新的線程,而是直接調用了線程的run方法,這正是google煞費苦心搞一套Handler的用意。
java代碼:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startThread();
// sendMessage();
SystemClock.sleep(2000);
setContentView(R.layout.main);
}
public void startThread() {
mThread.start();
}
public void sendMessage() {
MHandler mHandler = new MHandler();
Message msg = mHandler.obtainMessage();
msg.sendToTarget();
}
class MHandler extends Handler {
public MHandler() {
}
public MHandler(Looper l) {
super(l);
}
@Override
public void handleMessage(Message msg) {
int count = 0;
while (count++ < Integer.MAX_VALUE) {
Log.d(TAG, "Rintail");
}
}
}
Thread mThread = new Thread() {
@Override
public void run() {
int count = 0;
while (count++ < Integer.MAX_VALUE) {
Log.d(TAG, "Rintail");
}
二. Handler對於Message的處理不是並發的。一個Looper 只有處理完一條Message才會讀取下一條,所以消息的處理是阻塞形式的。但是如果用不同的Looper則能達到並發的目的。Service 中,onStart的執行也是阻塞的。如果一個startService在onStart執行完成之前,再次條用startService也會阻塞。如果希望能盡快的執行onStart則可以在onStart中使用handler,因為Message的send是非阻塞的。如果要是不同消息的處理也是並發的,則可以用不同的Looper實例化Handler。
(一)概述ImageView主要是用來顯示圖片的控件,可以對圖片進行放大、縮小和旋轉的功能。(二)ImageView中src和BackGround屬性的區別No.1 &m
第十八章、代理模式 代理模式也稱委托模式,是結構型設計模式之一。是應用廣泛的模式之一。1.定義為其他對象提供一種代理以控制對這個對象的訪問。2.使用場景當無法或不想直接訪
Android 顏色處理(八) SweepGradient 掃描/梯度渲染為什麼什麼叫掃描渲染呢? 相信大家都看過雷達掃描的效果,尤其是在安全軟件中. &nbs
本文實例講述了Android編程實現號碼歸屬地查詢的方法。分享給大家供大家參考,具體如下:我們通過發送XML訪問 WebService就可以實現號碼的歸屬地查詢,我們可以