瘋狂Android講義第三章-Android的事件處理

來源:互聯網
上載者:User

標籤:activity   訊息響應   監聽   回調   android事件處理   

本章主要涉及內容有:

一、Android事件處理機制,其中包括監聽和回調兩種處理機制

二、Configuration類

三、Handler、Loop及MessageQueue

四、AsyncTask


一、監聽機制和回調機制

1.1-監聽機制

監聽事件處理模型包括三類對象:事件來源、事件和事件監聽器。其中事件來源為事件發生的場所/組件,事件為使用者動作,事件監聽器則負責監聽並處理事件。

以使用者點擊某Button後,在主介面中顯示Toast這一過程為例,其中:

事件來源為Button

事件為使用者點擊該Button

事件監聽器(此處為onClickListener)負責監聽並處理該事件(顯示Toast)

典型的代碼實現:

btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(getApplication(), "Btn Clicked", Toast.LENGTH_SHORT).show();}});
監聽器的實現形式主要有四種:內部類形式、外部類形式、Activity本身作為事件監聽器類、匿名內部類形式

代碼中實現方式為匿名內部類形式,這也是最常用的形式。


1.2-回調機制

回調與監聽機制的不同之處主要在於:監聽機制中,由事件監聽器負責監聽及處理髮生的事件。而在回調機制中,事件來源中已經寫好了事件發生時應如何處理,即處理事件這一動作由事件來源本身完成,而不是託付給事件監聽器。重載回呼函數後將該View置於Activity的layout布局檔案中即可。

注意,此處回呼函數的返回值為boolean型。若返回true,表示事件處理完成後不會向上傳遞。返回false,則表示會繼續將該事件傳遞給更上一層進行處理。

同樣以點擊Button為例,若Button中返回false,則在Button的回呼函數中處理完該事件後,會繼續調用放置Button的Activity中響應回呼函數進行處理。

代碼實現:

public class MyButton extends Button {public MyButton(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overridepublic boolean onTouchEvent(MotionEvent e){Toast.makeText(getContext(), "Btn Clicked", Toast.LENGTH_SHORT).show();return true;}}

若同時實現了監聽和回調機制,則調用順序為監聽->回調。以此處為例,若同時實現了兩者,則會先調用監聽器中的onClickListener,再回調onTouchEvent。


二、Configuration類:用於擷取裝置狀態的類,Android可調用Activity的如下方法擷取系統的Configuration對象:

Configuration cfg = getResource().getConfiguration();

三、Handler、Loop及MessageQueue

Android中不允許子線程執行UI操作,只能通過利用Handler達到目的。

Handler的主要作用有兩個:

1.在新啟動的線程中發送訊息

2.在主線程中擷取、處理訊息

Handler處理的訊息來源於MessageQueue,而MessageQueue由Loop進行管理。

子線程需要執行UI操作的流程為:子線程將訊息請求加入至MessageQueue的末尾->主線程從子線程的MessageQueue中擷取到該訊息後,回調子線程中的handleMessage函數,執行處理動作。

實現有UI操作需求子線程類,在public void run()中需編寫以下幾步:

1.調用Looper.prepare();建立該線程的MessageQueue

2.定義Handler,重載handleMessage函數。主線程從子線程的MessageQueue中取出訊息後回調該函數執行UI操作

3.Looper.loop();啟動Looper。

主UI線程中系統已初始化了一個Looper對象,因此不需要執行Looper.prepare,Looper.loop()


四、AsyncTask

瘋狂Android講義第三章-Android的事件處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.