Android的事件處理

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   color   os   使用   

1.事件處理概述與Android事件處理   事件處理:當使用者在程式介面上執行各種操作時,應用程式必須為使用者動作提供相應動作,這種相應動作就需要通過事件處理來完成
   兩種:    1.基於監聽器的事件處理 (優先觸發)      方法:綁定特定的事件監聽器setOnclickListener。還允許UI組件的android:onClick屬性指定事件監聽方法再在Activity中定義該事件                 監聽方法。                 eg:android:onClick = "clickHandler"                         則在Activity中定義一個clickHandler(View source)方法,該方法將會負責處理該按鈕上的單擊事件。      事件監聽的處理模型主要涉及如下三類對象:        ->Event Source(事件來源):事件發生的場所,就是各個組件(按鈕、視窗)        ->Event :事件封裝了介面組件上發生的特定事情,如果程式需要活的介面組件上所發生事件的相關資訊,一般通過Event對象獲得。        ->Event Listener :負責監聽事件來源所發生的事件,並對各種事件做出相應的相應。       
       Android使用的是委派式(Delegation)事件處理方式:普通組件(事件來源)將整個事件處理委託給特定的對象(事件監聽器),當該事件                     源發生指定的事件時,就通知所委託的事件處理器(事件監聽器裡的執行個體方法)來做出相應的響應。             事件編程的關鍵就是實現事件監聽器類。如果事件發生時有較多的資訊需要傳給事件監聽器,那麼就需要將事件資訊封裝成Event對象,         該Event對象將作為參數傳入事件處理函數。        監聽器介面:OnclickListener:單擊事件                             OnCreateContentMenuListener:建立操作功能表事件                             OnFocusChangeListener:焦點改變事件                             OnKeyListener:按鍵事件                             OnLongClickListener:長單擊事件                             OnTouchListener:觸控螢幕事件
     程式中實現事件監聽器形式:       1>內部類形式:將事件監聽器定義成當前類的內部類;       2>外部類形式:在某個事件監聽器被多個GUI介面共用時;       3>Activity本身作為事件監聽器類:讓Activity本身實現監聽器介面,實現事件處理方法;       4>內部匿名類:使用內部匿名類建立事件監聽器對象,因為事件處理器沒有複用價值。            2.基於回調的事件處理(提高程式內聚性)       與事件監聽機制不同的是,當事件來源發生特定事件之後,該事件還是由事件來源本身負責處理。使用者在GUI 組件上激發某個事件,組件       自己的特定的方法將會負責處理該事件。我們只能繼承GUI類,並重寫該類的事件處理方法。所謂提高內聚型,就是把事件處理方法       封裝在內部,它更適合於應付那種事件處理邏輯比較固定組件。
       基於回調的事件傳播:基於回調是事件處理方法都有一個布爾類型傳回值,用於標識該處理方法是否能完全處理該事件,是為true。       重寫onTouchEvent方法可以相應觸控螢幕事件。
2.相應的系統設定的事件
    應用程式監聽系統設定的更改,對系統設定的更改做出相應。Configuration類用於描述手機裝置上的配置資訊(使用者特定的配置項,     系統的動態裝置配置)。     擷取系統的Configuration對象:Configuration cfg = getResources().getConfiguration();     擷取系統配置資訊常見屬性:P210
     監聽系統設定的更改:重寫onConfigurationChanged響應系統設定更改。     用Activity的setRequestedOrientation(int)來修改螢幕的方向。   3.Handler訊息傳遞機制
   為什麼只允許UI進程修改Activity裡的UI組件?    如果有多個線程並行作業UI組件,會導致安全執行緒問題。    當一個程式第一次啟動時,Android會啟動一條主線程Main Thread,主線程主要負責處理與UI有關的組件。        Handler存在的意義?    Android只允許UI線程修改Activity的UI組件,會導致新啟動的線程無法動態修改介面組件的屬性值,需要藉助Handler的訊息傳遞    機制來實現。       Handler作用:把訊息發送給Looper管理的MessageQueue,並負責處理Looper分給它的訊息。    Looper作用:每個線程1個Looper來管理MessageQueue,會不斷地從MessageQueue中取出訊息,並將訊息分給對應該Handler處理。                           Looper建立過程有2種:1.主UI系統自己初始化了Looper對象,因此程式直接建立Handler就可以通過它發送處理訊息。                                                                 2.自己啟動的子線程,必須自己建立一個Looper對象,並啟動,Looper.prepare()方法                                                                    和Looper.Loop()。    MessageQueue作用:由Looper負責管理,FIFO方式
4.非同步任務 (AsyncTask)    為瞭解決新的線程不能更新UI的問題,Android有如下解決方案:    1.Handler實現線程之間的通訊    2.Activity.runOnUiThread(Runnable)    3.View.post(Runnable)    4.View.postDelayed(Runnable,long)    初此之外,AsyncTask更加輕量些,適合簡單的非同步作業,不需要藉助線程和Handler即可實現。P220   

來自為知筆記(Wiz)

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.