浅议事件异步处理底层实现原理

//主类
package cn.com.likeshow.bluetoothchat;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		final TextView tv=new TextView(getApplicationContext());
		MyButton  but=new MyButton(getApplicationContext());

		LinearLayout lin=new LinearLayout(getApplicationContext());
		lin.setOrientation(LinearLayout.VERTICAL);

		lin.addView(tv);
		lin.addView(but);
		setContentView(lin);

		//字定义按钮添加监听器
		//创建你匿名MyListener对象,传给but的setOnClickListener()方法
		but.setOnClickListener(new MyListener() {
			@Override
			public void onClick(MyEvent e) {
				tv.setText("MyEvent事件 "+e.getMessage());
			}
		});
	}

}

=====================================================================================================

//MyView接口
package cn.com.likeshow.bluetoothchat;

public interface MyView {
   //所有控件都用的方法,只能被系统调用
	public void systemEventMetod(MyEvent e);
}

========================================================================================

//MyListener接口
package cn.com.likeshow.bluetoothchat;

import android.view.View;

public interface MyListener {

	public void onClick(MyEvent e);
}

===================================================================

//MyEvent简单事件封装类
package cn.com.likeshow.bluetoothchat;

public class MyEvent {

	private String eventStr;
	public MyEvent(String eventStr)
	{
		this.eventStr=eventStr;
	}

	public String  getMessage()
	{
		return eventStr;
	}
}

=============================================

//自定义按钮
package cn.com.likeshow.bluetoothchat;

import java.util.Date;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class MyButton extends View implements MyView {

	private MyListener lis;

	public MyButton(Context context) {
		super(context);

	}

	/**
	 *
	 * 所用控件都实现的一组规范(即:函数   此处假定该函数是public void systemEventMetod(MyEvent e)  系统会调用该函数)
	 * 即:当该按钮被点击时,系统自动调用MyView基类中的systemEventMetod(MyEvent e)方法
	 */
	@Override
	public void systemEventMetod(MyEvent e) {
		//防止为调用 setOnClickListener(MyListener lis)时抛空指针异常
		if(lis==null)
			return;
		//通过多态完成调用自己实现的方法
		lis.onClick(e);
	}

	//注册
	public void setOnClickListener(MyListener lis)
	{
		this.lis=lis;
	}

	//绘制按钮界面
	@Override
	public void onDraw(Canvas canvas)
	{
		super.onDraw(canvas);
		Paint p=new Paint();
		p.setColor(Color.GRAY);

		canvas.drawRect(10,80,100,120, p);

		p.setColor(Color.RED);
		canvas.drawText("按钮", 20, 100, p);

	}

	//模拟点击按钮后,系统自动调用MyView基类中的  systemEventMetod(MyEvent e)方法
	//每当创建MyButton时,系统会得到该MyButton对象的引用,当系统获取到屏幕点击时,会自动调用MyButton
	//的  systemEventMetod(MyEvent e)方法
	@Override
    public boolean onTouchEvent(MotionEvent event) {
        String s=new Date().toLocaleString();

		this.systemEventMetod(new MyEvent(s));

        return super.onTouchEvent(event);
    }
}

浅议事件异步处理底层实现原理,布布扣,bubuko.com

时间: 2024-08-05 15:19:41

浅议事件异步处理底层实现原理的相关文章

【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile

章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译==>Java字节码 ==通过类加载器==>JVM(jvm执行字节码)==转化为汇编指令==>CPU上执行. Java中使用的并发机制依赖于JVM的实现和CPU的指令. volatile初探 volatile是是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性.可见性

迭代器Iterator的底层实现原理

第一步:没有接口的迭代器简单实现原理 1 package com.bjsxt.xiaofei; 2 /** 3 * 迭代器底层原理 4 * 方法: 5 * hasNext() 6 * next() 7 * remove() 8 * @ClassName: MyAarryList 9 * @Description: TODO(这里用一句话描述这个类的作用) 10 * @author 尚晓飞 11 * @date 2014-7-29 下午7:06:09 12 * 13 */ 14 public cl

由PHP底层工作原理说起

之前做过.net,java开发,也写过几个Php的网站,似乎3种主要编程语言都接触了.但是越来越觉得自己对编程的整个流程缺乏一个整体的认识,尤其是底层的机制.譬如网络编程,编译原理,服务器端,数据库存储引擎原理等.于是看了一些书,比较经典的有apue,unp,tcp/ip,nginx,mysql的innodb存储引擎,深入理解jvm.渐渐发现无论用什么语言做开发,背后都有linux,shell,c/c++,nginx服务器,mysql的身影.也许只有掌握了这些核心的原理知识,一个程序员才具有核心

使用RxBinding处理控件异步调用

欢迎Follow我的GitHub, 关注我的CSDN. RxBinding是Rx中处理控件异步调用的方式, 也是由Square公司开发, Jake负责编写. 通过绑定组件, 异步获取事件, 并进行处理. 编码风格非常优雅. 让我来讲解一下如何使用, 本文含有代码示例. Github下载, 关注RxBinding部分, 其余参考. 1. 依赖 除了RxJava, 再添加RxBinding的依赖. // RxBinding compile 'com.jakewharton.rxbinding:rxb

那些年读过的书《Java并发编程的艺术》一、并发编程的挑战和并发机制的底层实现原理

一.并发编程的挑战 1.上下文切换 (1)上下文切换的问题 在处理器上提供了强大的并行性就使得程序的并发成为了可能.处理器通过给不同的线程分配不同的时间片以实现线程执行的自动调度和切换,实现了程序并行的假象. 在单线程中:线程保存串行的执行,线程间的上下文切换不会造成很大的性能开销. 而在多线程中:线程之间频繁的调度需要进行上下文切换以保存当前执行线程的上下文信息和加载将要执行线程的上下文信息,而上下文切换时需要底层处理器.操作系统.Java虚拟机提供支持的会消耗很多的性能开 销.如果频繁的进行

PHP底层工作原理

分类: PHP本质2011-11-15 15:55 2840人阅读 评论(0) 收藏 举报 php工作apacheextensionzendvariables 目录(?)[+] 简介 先看看下面这个过程: 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的: PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口): PHP总共有三个模块:内核.Zend引擎.以及扩展层: PHP内核用来处理请求.文件流.错误处理等相关操作: Ze

Kubernetes(k8s)底层网络原理刨析

目录 1 典型的数据传输流程图 2 3种ip说明 3 Docker0网桥和flannel网络方案 4 Service和DNS 4.1 service 4.2 DNS 5 外部访问集群 5.1 外部访问service 5.2 ingress 附 扩展实战 附A 用service实现DB的管理 附B 用NetworkPolicy实现访问权限隔离 附C 用secret对象管理账户密码 1 典型的数据传输流程图 ? 一个外部的business-manager请求,首先进入集群的入口(ingress),i

Java并发编程系列-(8) JMM和底层实现原理

8. JMM和底层实现原理 8.1 线程间的通信与同步 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息.在编程中,线程之间的通信机制有两种,共享内存和消息传递. 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信. 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()和notify(). 线程之间的同步

HashMap的底层实现原理是什么?

HashMap的结构和底层实现原理是什么? HashMap用的是非常常见的结构:数组和链表的结合的数据结构.数组的每个地方都存了Key-Value这样的实例,在JDK8中交做Node实例.因为数组本身所有的位置都为null,所以在put的时候会根据key值hash算出一个index值.但是数组的长度是有限的,当我们在有限的长度下使用随机的Hash函数时,就有机会是的两个key的Hash相同.那么这时候就需要在原来的数组位置上尾插一个(node)形成一个链表.每一个节点都会保存自身的Hash.Ke