国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Android學(xué)習(xí)筆記】事件監(jiān)聽機(jī)制詳解

這篇具有很好參考價值的文章主要介紹了【Android學(xué)習(xí)筆記】事件監(jiān)聽機(jī)制詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Android第三章


>事件處理的概述


  • 兩種事件處理機(jī)制
    1. 基于監(jiān)聽的事件處理
    2. 基于回調(diào)的事件處理

>基于監(jiān)聽的事件處理機(jī)制


  • 涉及到的三類對象

    1. Event Source事件源,指各個組件。
    2. Event 界面組件上發(fā)生的特定的事情,。
    3. Event Listener監(jiān)聽事件源發(fā)生的事情。并對各種事情作出相應(yīng)的響應(yīng)。
    4. Event Handler事件處理器,當(dāng)事件監(jiān)聽器捕獲事件后,由響應(yīng)的事件處理器識別特定的事件,并做出響應(yīng)的動作。
  • 事件監(jiān)聽機(jī)制的工作流程
    普通組件(事件源對象) 發(fā)生很多事件,生成多種事件對象 被同一個監(jiān)聽器對象捕獲 監(jiān)聽器通過不同的事件處理器處理這個事件。

    每個組件可以根據(jù)不同的事件類別指定多個監(jiān)聽器,每一個監(jiān)聽器可以監(jiān)聽多個事件源。

>實(shí)現(xiàn)事件監(jiān)聽器的方法


  1. 內(nèi)部類作為時間的監(jiān)聽器
    使用內(nèi)部類作為事件監(jiān)聽器能夠在這個類內(nèi)復(fù)用該監(jiān)聽器。該監(jiān)聽器類能夠自由訪問外部類的所有界面組件
  2. 外部類作為時間監(jiān)聽器
    事件監(jiān)聽器通常屬于特定的GUI界面,定義成外部類不利于提高程序的內(nèi)聚性。外部類形式的時間監(jiān)聽器不能夠自由訪問GUI界面的類中的組件。同時也適用于監(jiān)聽器于GUI界面沒有任何耦合情況。

    監(jiān)聽器還是主要來寫顯示邏輯,具體的業(yè)務(wù)邏輯放到外部的其他函數(shù)或者類中進(jìn)行處理。

  3. Activity類本身作為事件監(jiān)聽器
    不推薦,activity類本身用來界面初始化工作,包含事件監(jiān)聽器容易造成程序的邏輯結(jié)構(gòu)混亂。
  4. 匿名類作為時間監(jiān)聽器類
    大部分時候事件監(jiān)聽器類的代碼沒有什么復(fù)用價值,所以只要使用匿名類來實(shí)現(xiàn)事件監(jiān)聽器想要達(dá)到的頁面邏輯就好。

android可以直接在界面布局中制定標(biāo)簽綁定事件的處理方式。
android:onClick=“clickHandler”

>基于回調(diào)的事件處理方法


  • 回調(diào)機(jī)制
    事件的處理直接綁定到與組件相關(guān)的時間處理函數(shù)上,而非通過監(jiān)聽器的監(jiān)聽和事件處理器的匹配處理。有點(diǎn)像事件監(jiān)聽器和事件源融合在一起,不需要單獨(dú)的時間監(jiān)聽器類,事件源本身能夠監(jiān)聽自身發(fā)生的各種事件。
  • 基于回調(diào)的事件傳播
    當(dāng)返回為true時,表明該方法已經(jīng)能夠處理發(fā)生的事件,事件不會向外傳播給外層的時間監(jiān)聽器。當(dāng)返回為false時,如果有外圍的監(jiān)聽器處理同一個事件,則事件會向外傳播,同時被其他監(jiān)聽器堅挺到。如果存在各種監(jiān)聽器,其監(jiān)聽順序?yàn)椋航壎ǖ氖录O(jiān)聽器–>基于回調(diào)的內(nèi)部事件監(jiān)聽器–>基于回調(diào)的外部事件監(jiān)聽器。

>相應(yīng)系統(tǒng)設(shè)置的事件


  • 用來獲取系統(tǒng)的配置
  • onConfigurationChanged能夠監(jiān)聽相關(guān)的配置改變的事件。

>Handler消息傳遞機(jī)制


  • 工作原理
    android第一次啟動,主線程負(fù)責(zé)activityUI界面的線程,而且只允許UI線程對主界面進(jìn)行修改,其他新啟動的線程無法對主界面進(jìn)行直接修改,需要使用Handler進(jìn)行消息傳遞。

  • Handler簡介

    1. 在新啟動的線程中發(fā)送消息
    2. 在主線程中獲取和處理消息

    好像是原來的事件處理機(jī)制變成了消息處理機(jī)制,通過監(jiān)聽消息,處理消息完成一系列動作,同事件處理一樣。

  • Handler涉及的方法

    1. HandlerMessage()
    2. hasMessage()
    3. hasMessages()
    4. obtainMessage()
    5. sendEmptyMessage()
    6. sendEmptyMessageDelayed()
    7. sendMessage()
    8. sendMessageDelayed()
  • Handler、Loop、MessageQueue的工作原理

    1. Message是Handler接受和處理的對象
    2. Looper每個線程只能有一個Looper,loop方法負(fù)責(zé)讀取MessageQueue中的消息
    3. MessageQueen消息隊列,采用了先進(jìn)先出的方式管理隊列。
private Looper()
{
	mQueue = new MessageQueue();
	mRun = true;
	mThread = Thread.currentThread();
}
  • Looper類的使用方法
    1. 調(diào)用Looper的prepare方法,創(chuàng)建Looper對象,生成對應(yīng)的MessageQueue來管理事件
    2. 創(chuàng)建Handler子類,用于發(fā)送本線程的消息。重寫HandlerMessage方法,負(fù)責(zé)處理來自其他線程的消息。
    3. 調(diào)用Looper的loop方法啟動Looper類

UI線程一般專門用來相應(yīng)用戶的界面操作,而其他的邏輯運(yùn)算和處理都交給其他線程處理主要目的是防止UI線程被阻塞而讓用戶以為界面卡頓。
此時如果UI線程與其他線程的交互方式,就是Handler消息傳遞機(jī)制,同事件監(jiān)聽機(jī)制的邏輯十分相似。

>異步任務(wù)


  • 解決新線程不能更新UI主界面的問題的方法

    • 使用Handler消息處理機(jī)制
    • Activity.runOnUiThread(Runnable)
    • View.post(Runnable)
    • View.postDelayed(Runnable,long)
    • 異步處理機(jī)制
  • AsyncTask<Params,Progress,Result>異步類文章來源地址http://www.zghlxwxcb.cn/news/detail-500916.html

    1. 創(chuàng)建AsyncTask的子類,并制定三個參數(shù)的類型。
    2. 根據(jù)需要實(shí)現(xiàn)下列方法
      • dolnBackground()后臺線程即將執(zhí)行的任務(wù),通過調(diào)用publishProgress()更新任務(wù)的執(zhí)行進(jìn)度
      • onProgressUpdate()調(diào)用更新任務(wù)進(jìn)度的方法后,會觸發(fā)這個方法
      • onPreExecute()方法,執(zhí)行后臺操作前被調(diào)用,完成初始化工作
      • onPostExcute()后臺任務(wù)執(zhí)行完成后,調(diào)用這個方法
    3. 調(diào)用AsyncTask子類的execute方法開始執(zhí)行好事任務(wù)。

到了這里,關(guān)于【Android學(xué)習(xí)筆記】事件監(jiān)聽機(jī)制詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從源碼Debug深入spring事件機(jī)制,基于觀察者模式仿寫spring事件監(jiān)聽骨架

    從源碼Debug深入spring事件機(jī)制,基于觀察者模式仿寫spring事件監(jiān)聽骨架

    定義一個事件 定義兩個listener 注入spring容器里的ApplicationEventPublisher對象,發(fā)布事件 從 eventPublisher.publishEvent(new MyEvent(\\\"xxx\\\")); 進(jìn)去很容易就能找到,可以發(fā)現(xiàn) SimpleApplicationEventMulticaster這個事件發(fā)布對象持有所有l(wèi)istenter對象及MyEvent對象 , 事件發(fā)布過程其實(shí)就是遍歷拿到每個li

    2024年02月12日
    瀏覽(16)
  • Android監(jiān)聽事件

    ?監(jiān)聽事件機(jī)制由事件源,事件和事件監(jiān)聽器三類對象組成,事件源一般就是activity中的UI控件。 下面引用別人整理的圖來更加形象的表達(dá)這些關(guān)系。 ?事件監(jiān)聽機(jī)制的意義就是讓事件源的行為委托給事件監(jiān)聽器,讓監(jiān)聽器控制事件的發(fā)生。 ? 通過內(nèi)部類實(shí)現(xiàn) 通過匿名內(nèi)部

    2023年04月26日
    瀏覽(17)
  • Android 11 定制系統(tǒng)全局監(jiān)聽觸摸事件接口

    1.定義創(chuàng)建aidl接口(由于需要回調(diào)這里優(yōu)先需要增加一個回調(diào)接口 ) frameworksbasecorejavaandroidappIOnTouchListener.aidl package android.app; oneway interface IOnTouchListener { ? ? ?void onTouchEvent( int action); } ? 2.新增調(diào)用接口 在 base/core/java/android/view/IWindowManager.aidl 修改如下: import android.ap

    2023年04月08日
    瀏覽(28)
  • 【Spring | 事件監(jiān)聽詳解】

    【Spring | 事件監(jiān)聽詳解】

    上篇 Spring 事件監(jiān)聽概述 對 Spring 事件監(jiān)聽的機(jī)制有了個基本的了解。 本篇來詳細(xì)的解讀下Spring 的 事件監(jiān)聽機(jī)制 。 ?? ApplicationEvent 最重要的子類是 ApplicationContextEvent 抽象類, ApplicationContextEvent 是spring容器Context生命周期事件的基類。 ApplicationContextEvent 的有四個子類,如

    2024年02月12日
    瀏覽(21)
  • 前端Vue select 下拉框詳解以及監(jiān)聽事件

    前端Vue select 下拉框詳解以及監(jiān)聽事件

    目錄 簡介 使用詳解 演示示例 :key=\\\"option.value\\\" :value=\\\"option.value\\\" 區(qū)別 監(jiān)聽事件 ????????在 Vue 中,下拉框通常通過 select 元素與一系列的 option 元素來創(chuàng)建。Vue 的數(shù)據(jù)綁定和指令(如 v-model 和 v-for )可以使創(chuàng)建動態(tài)下拉框變得非常簡單和靈活。下面詳細(xì)介紹如何在 Vue 中使

    2024年02月20日
    瀏覽(22)
  • 【SpringBoot筆記34】Spring Events事件驅(qū)動編程之事件的發(fā)布和監(jiān)聽操作

    這篇文章,主要介紹Spring Events事件驅(qū)動編程之事件的發(fā)布和監(jiān)聽操作。 目錄 一、基于接口實(shí)現(xiàn) 1.1、自定義事件 1.2、主動發(fā)布事件 1.3、監(jiān)聽事件對象

    2024年02月16日
    瀏覽(25)
  • Android中實(shí)現(xiàn)RecyclerView,并對item及其多個子控件的點(diǎn)擊事件監(jiān)聽

    Android中實(shí)現(xiàn)RecyclerView,并對item及其多個子控件的點(diǎn)擊事件監(jiān)聽

    目錄 背景 實(shí)現(xiàn)RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入?RecyclerView 第三步、新建一個adapter? ?第四步、在activity中初始化綁定adapter即可 實(shí)現(xiàn)item及其多個子組件點(diǎn)擊事件監(jiān)聽 第一步、 適配器中創(chuàng)建監(jiān)聽對象 第二步、適配器中綁定監(jiān)聽item和子組件 第三

    2024年02月19日
    瀏覽(24)
  • java 實(shí)現(xiàn)事件監(jiān)聽EventListener的方式詳解及分析

    java 實(shí)現(xiàn)事件監(jiān)聽EventListener的方式詳解及分析

    我們開發(fā)中經(jīng)常遇到監(jiān)聽事件,首先我們先來了解下事件相關(guān)知識: 使用場景(場景一):銀行操作轉(zhuǎn)賬成功后需要給客戶發(fā)送短信和郵件,使用事件就可以實(shí)現(xiàn)解耦并異步。 我們監(jiān)聽事件之前要有事件源source,創(chuàng)建事件源(Event),發(fā)布事件(publishEvent),然后才能到監(jiān)聽事

    2024年02月07日
    瀏覽(26)
  • Android觸摸事件分發(fā)機(jī)制(一)

    Android觸摸事件分發(fā)機(jī)制(一)

    本文主要分享事件分發(fā)中的基本概念。 介紹負(fù)責(zé)參與分發(fā)事件的主要方法。 從這些方法的核心邏輯中,總結(jié)事件分發(fā)的規(guī)律。 被分發(fā)的對象是那些?被分發(fā)的對象是用戶觸摸屏幕而產(chǎn)生的點(diǎn)擊事件,事件主要包括:按 下、滑動、抬起與取消。這些事件被封裝成 MotionEvent 對

    2024年02月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包