回调深入理解 同步回调 以android中View.OnClickListener为列

现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了

//这个是View的一个回调接口

/**

* Interface definition for a callback to be invoked when a view is clicked.

*/

public interface OnClickListener {

/**

* Called when a view has been clicked.

*

* @param v The view that was clicked.

*/

void onClick(View v);

}

package com.example.demoactivity;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

/**

* 这个就相当于Class A

* @author xiaanming

* 实现了 OnClickListener接口---->背景一

*/

public class MainActivity extends Activity implements OnClickListener{

/**

* Class A 包含Class B的引用----->背景二

*/

private Button button;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button1);

/**

* Class A 调用View的方法,而Button extends View----->A类调用B类的某个方法 C

*/

button.setOnClickListener(this);

}

/**

* 用户点击Button时调用的回调函数,你可以做你要做的事

* 这里我做的是用Toast提示OnClick

*/

@Override

public void onClick(View v) {

Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show();

}

}

下面是View类的setOnClickListener方法,就相当于B类咯,只把关键代码贴出来

/**

* 这个View就相当于B类

* @author xiaanming

*

*/

public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {

/**

* Listener used to dispatch click events.

* This field should be made private, so it is hidden from the SDK.

* {@hide}

*/

protected OnClickListener mOnClickListener;

/**

* setOnClickListener()的参数是OnClickListener接口------>背景三

* Register a callback to be invoked when this view is clicked. If this view is not

* clickable, it becomes clickable.

*

* @param l The callback that will run

*

* @see #setClickable(boolean)

*/

public void setOnClickListener(OnClickListener l) {

if (!isClickable()) {

setClickable(true);

}

mOnClickListener = l;

}

/**

* Call this view‘s OnClickListener, if it is defined.

*

* @return True there was an assigned OnClickListener that was called, false

* otherwise is returned.

*/

public boolean performClick() {

sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);

if (mOnClickListener != null) {

playSoundEffect(SoundEffectConstants.CLICK);

//这个不就是相当于B类调用A类的某个方法D,这个D就是所谓的回调方法咯

mOnClickListener.onClick(this);

return true;

}

return false;

}

}

这个例子就是Android典型的回调机制,看完这个你是不是更进一步的理解了回调机制呢? 线程run()也是一个回调方法,当执行Thread的start()方法就会回调这个run()方法,还有处理消息都比较经典等等

时间: 2024-10-17 11:58:59

回调深入理解 同步回调 以android中View.OnClickListener为列的相关文章

深入理解Android中View

文章目录 [隐藏] 一.View是什么? 二.View创建的一个概述: 三.View的标志(Flag)系统 四.MeasureSpec 五.几个重要方法简介 5.1 onFinishInflate() 5.2 onMeasure(int, int) 5.3 onLayout(boolean, int, int,int, int) 5.4 onSizeChanged(int, int, int,int) 5.5 onDraw(android.graphics.Canvas) 这回我们是深入到Vie

Android中View绘制流程以及invalidate()等相关方法分析

前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时真挚地向渴望了解 Android 框架层的网友,推荐这本书,希望你们能够在Android开发里学到更多的知识 . 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为 根据之前设置的状态,判断是否需要重新计算视图大小(measure).是否重新需要安置视图的位置(layout).以及是否需要重绘 (d

源码解析Android中View的measure量算过程

Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算.布局.绘图的总体机制可参见博文< Android中View的布局及绘图机制>.量算是布局和绘图的基础,所以量算是很重要的一个环节.本文将从源码角度解析View的量算过程,这其中会涉及某些关键类以及关键方法. 对View进行量算的目的是让View的父控件知道View想要多大的尺寸. 量算过程概述 如果要进行量算的View是ViewGroup类型,那么ViewGr

Android中View绘制流程以及invalidate()等相关方法分析(转载的文章,出处在正文已表明)

转载请注明出处:http://blog.csdn.net/qinjuning 前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时真挚地向渴望了解 Android 框架层的网友,推荐这本书,希望你们能够在Android开发里学到更多的知识 . 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为 根据之前设置的状态,判断是否需要重新计算视图大小(mea

Android中View和ViewGroup介绍

1. 概念Android中的View与我们以前理解的“视图”不同.在Android中,View比视图具有更广的含义,它包含了用户交互和显示,更像Windows操作系统中的window. ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型. ViewGroup(树根)和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接

Android 中View的绘制机制源码分析 一

尊重原创: http://blog.csdn.net/yuanzeyao/article/details/46765113 差不多半年没有写博客了,一是因为工作比较忙,二是觉得没有什么内容值得写,三是因为自己越来越懒了吧,不过最近我对Android中View的绘制机制有了一些新的认识,所以想记录下来并分享给大家.在之后的几篇博客中,我会给大家分享如下的内容: 1.View中measure(),layout(),draw()函数执行过程分析,带领大家详细分析View的尺寸测量过程,位置计算,并最终

【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

Android 中View的绘制机制源代码分析 三

到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编辑器.这里之所以使用"下定决心"这个词.是由于毕竟Html编辑器使用好几年了.非常多习惯都已经养成了,要改变多年的习惯确实不易.相信这也是还有非常多人坚持使用Html编辑器的原因. 这也反应了一个现象.当人对某一事物非常熟悉时,一旦出现了新的事物想代替老的事物时,人们都有一种抵触的情绪,做

源码解析Android中View的layout布局过程

Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算.布局.绘图的总体机制可参见博文 < Android中View的布局及绘图机制>.量算是布局的基础,如果想了解量算的细节,可参见博文<源码解析Android中View的measure量算过程>.本文将从源码角度解析View的布局layout过程,本文会详细介绍View布局过程中的关键方法,并对源码加上了注释以进行说明. 对View进行布局的目的是计算