handler

JS事件派发器EventEmitter

让人想犯罪 __ 提交于 2020-03-30 04:39:37
原文地址: http://zhangyiheng.com/blog/articles/js_event_mitter.html 需求 随着Browser客户端JS越来越复杂,MVC( Client端)设计模式成为一个很好的开发选择, 而MVC开发模式中,最基础的功能就是把Model和View关联起来, 当Model发生变化的时候,View呈现做出相应的调整。 实现此功能最合适的方式莫过于事件Event了, 对于Event大家应该都很熟悉,比如dom中的button,可以通过addEventListener/attachEvent添加click事件处理。 而一般的object对象是没有事件派发功能的,基于此需求,实现了一个EventEmitter。 具体实现 /** * Created by taozh on 2017/6/22. * taozh1982@gmail.com */ var EventEmitter = function () { this.__z_e_listeners = {}; }; EventEmitter.prototype.on = function (evt, handler, context) { var handlers = this.__z_e_listeners[evt]; if (handlers === undefined) {

Android MP3录音实现

夙愿已清 提交于 2020-03-29 12:23:49
给APP做语音功能,必须考虑到IOS和Android平台的通用性。wav录音质量高,文件太大,AAC和AMR格式在IOS平台却不支持,所以采用libmp3lame把AudioRecord音频流直接转换成MP3格式。 声明一下,代码参考了 http://blog.csdn.net/cboy017/article/details/8455629 ,这里只是借花献佛,把整个流程写得更详细。 这里采用的是最新的lame-3.99.5.tar。 可以去Lame官网下载,博文最后也有CSDN下载地址。官网地址: http://lame.sourceforge.net/ 如果你对JNI和NDK完全不熟悉的话,请看前一篇博文 Android NDK开发之入门教程 先看一下项目文件目录: 开始Coding吧! 1 新建项目AndroidLameMP3。 2 创建JNI目录。 3 下载lame-3.99.5.tar。 解压,把子文件夹libmp3lame中的非.h和.c格式的文件删除后的剩余的所有文件和include下的lame.h放进一个新建的lame-3.99.5_libmp3lame文件夹中,最后把整个lame-3.99.5_libmp3lame文件夹拷贝到JNI目录下。 4 在com.example.lamemp3下创建MP3Recorder.class: MP3Recorder.class

Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解

主宰稳场 提交于 2020-03-28 23:28:36
MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.TextView; /** * Demo描述: * * 示例步骤如下: * 1 子线程给子线程本身发送消息 * 2 收到1的消息后,子线程给主线程发送消息 * 3 收到2的消息后,主线程给子线程发送消息 * * 为实现子线程给自己本身发送消息,关键还是在于构造Handler时传入的Looper. * 在此就传入该子线程自己的Looper即调用Looper.myLooper(),代码如下: * Looper.prepare(); * mHandlerTest1=new HandlerTest1(Looper.myLooper()); * Looper.loop(); * * 所以当mHandlerTest1.sendMessage(message);发送消息时 * 当然是发送到了它自己的消息队列. * * 当子线程中收到自己发送的消息后,可继续发送消息到主线程.此时只要注意构造 *

Chromium Embedded Framework中文文档 (使用C API)

允我心安 提交于 2020-03-28 18:32:49
转载自:http://www.cnblogs.com/think/archive/2011/10/06/2199695.html 简介 CEF的C API是由libcef DLL暴露的基于C的接口,cef_capi.h 头文件中定义的接口是由CEF translator tool自动生成的C++ API镜像。 引用计数 理解引用计数可能是使用CEF C API最困难的部分了,CEF使用引用计数概念类似于COM的概念,这里有一些基本的规则可以帮助你减少使用引用计数时的困难。 1. 当将一个结构传给它自己的成员函数时,不要进行引用计数的加、减操作: struct->call_func(struct,...); // no reference counting change on 'struct' 2. 在将结构作为参数传给其它结构前,增加引用计数: // Should have already added a reference to 'some_other_struct' struct->call_func(...,some_other_struct,...); 3. 在你使用完从别处以参数传过来的结构后,减少它的引用计数: void my_func(...,some_other_struct,...) { // remove a reference from 'some_other

Android进程间通信之LocalSocket通信

☆樱花仙子☆ 提交于 2020-03-28 05:03:41
LocalSocket,在Unix域名空间创建的一个套接字(非服务端)。 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信。 具体就是Native层Server和Framework层Client之间进行通信,或在各层次中能使用Client/Server模式实现通信。 在这里通过LocalSocket实现应用之间的通信,可以接收、发送数据,同时将接收到的数据通过activty显示。 Server端: package com.example.driverexam; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import android.net.Credentials; import android.net.LocalServerSocket; import android.net.LocalSocket; import android.os.Handler; import android.os.Message; import android.util.Log; /** * 通过LocalSocket实现 * @author Administrator * */

Spring AOP面向切面编程

独自空忆成欢 提交于 2020-03-27 10:59:28
目录 1.AOP概览 2.Spring AOP的使用举例 PointCut切入点 Advice通知 3.Spring AOP的实现原理 3.1运行时织入 3.1.1代理模式 3.1.2 JDK动态代理 3.1.3 cglib动态代理 3.1.4 Spring如何创建代理bean ProxyFactoryBean的getObject()方法 getSingletonInstance()方法 createAopProxy() DefaultAopProxyFactory的createAopProxy()方法 getProxy(aopProxy) JdkDynamicAopProxy.getProxy()方法 ObjenesisCglibAopProxy.getProxy()方法 4.Spring AOP的实现原理 4.1 链式调用 4.1.1 职责链模式 4.1.1.1 V1 4.1.1.2 V2 4.1.2 Spring内部实现 1)拦截器链是如何生成的 2)拦截器链是如何链式调用的 3)Spring使用职责链模式实现拦截器链链式调用 5. ProxyFactory实现AOP 1.AOP概览 AOP(Aspect Oriented Programming),什么是面向切面编程? 1)AOP是一种编程范式,不是编程语言 编程范式概览 面向过程编程 面向对象编程 函数式编程 事件驱动编程

SpringBoot添加拦截器

梦想与她 提交于 2020-03-25 13:08:56
自定义拦截器 package com.company.interceptor;import lombok.extern.slf4j.Slf4j;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@Slf4jpublic class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.debug("preHandle method is running"); return true; } @Override public void postHandle(HttpServletRequest request,

RESTful-1概述

故事扮演 提交于 2020-03-25 06:34:49
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 概述 REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,Roy Fielding是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。 [1] 原则条件 REST 指的是一组架构 约束条件 和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合 云计算 之类的环境

WC Java 实现

十年热恋 提交于 2020-03-25 05:04:24
要求 基本要求 [x] -c 统计文件字符数 (实现) [x] -w 统计文件词数 (实现) [x] -l 统计文件行数(实现) 扩展功能 [x] -s 递归处理目录下符合条件得文件(实现) [x] -a 返回文件代码行 / 空行 / 注释行(实现) [x] 支持各种文件的通配符(*,?)(实现) 高级功能 [ ] -x 图形化界面(未实现) GitHub仓库:https://github.com/Pramy/wc 设计 按照需求可以分为3个模块,1:对文件内容的统计,2:对输入指令的解析,3:批量操作 第一个模块:可以将文本一行一行分析得到自己的结果,可以将一种指令对应一个处理器(handler),在程序启动的时候加载所有处理器,然后针对不同的指令调用不同的处理器,并且应该有获取结果的接口,然后再对各种处理进行抽象,抽象出Handler接口。 第二个模块:第二个模块加上第一个模块就需要相对调整第一个模块,根据输入的指令解析后,得到各种各样的处理器,然后把它连成一条处理链,将需要分析的一行字符串,从头到尾依次处理,也应当有一条获取结果的调用链,从头到尾一次获取处理结果,然后再对模块一的Handler进行抽象,得到AbstractHandler,各种处理器应当继承这个抽象处理器,然后对输入的命令进行匹配,查找 理器的架构图如下 第三个模块:根据-a命令来设计批量分析功能 代码

Py西游攻关之模块

萝らか妹 提交于 2020-03-25 04:52:47
Py西游攻关之模块 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。 使用模块有什么好处? 最大的好处是大大提高了代码的可维护性。 其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。 所以,模块一共三种: python标准库 第三方模块 应用程序自定义模块 另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。 模块导入方法 1 import 语句 1 import module1[, module2[,... moduleN] 当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?答案就是解释器有自己的搜索路径,存在sys.path里。   1 2 [' ', ' / usr / lib /