handler

Android中子线程更新UI的几种方式

依然范特西╮ 提交于 2020-01-25 20:31:12
1、Handler 先来看下官方对Handler的描述 A Handler allows you to send and process {@link Message} and Runnable objects associated with a thread's {@link MessageQueue}. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue. 翻译过来的大概意思:Handler允许你发送、执行与线程相关的Message和Runnable对象,每个Handler实例 关联到一个单独的线程和线程中的Message Queue。当创建Handler对象时

linux 中断管理(一)

这一生的挚爱 提交于 2020-01-25 16:46:02
一、中断作用 Linux 内核需要对连接到计算机上的所有硬件设备进行管理。如果要管理这些设备,首先得和它们互相通信才行。 一般有两种方案可实现这种功能: 轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理; 中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。 使用轮询的方式会占用CPU比较多的时间,效率极低。例如:要读取一个按键有没有被按下时,一个进程需要不断地查询按键有没有被按下。这样这个任务就占用CPU大量得时间,使得CPU做了大量的无用功。使用中断提供这样的一个机制。当按键没有被按下的时候,挂起当前进程,将控制权转交给其他进程。当按键按下的时候,操作系统把当前进程设为活动的,从而允许该进程继续执行。 二、linux中断管理 linux 内核将所有的中断统一编号,使用一个 irq_desc 结构体数组描述中断。一个数组项对用一个中断(或者是一组中断,它们共用中断号)。 struct irq_desc 结构体记录了,中断的名称、中断状态,底层硬件访问接口(使能中断,屏蔽中断,清除中断),中断处理函数的入口, 通过它可以调用用户注册的中断处理函数。 1、struct irq_desc struct irq_desc 在 include\linux\irq.h 文件里面定义 struct irq_desc { irq

HttpModule与IHttpHandler

孤街浪徒 提交于 2020-01-25 13:09:25
HttpModule 必须实现 System.Web.IHttpModule 接口, HttpHandler 和 HttpHandlerFactory 必须分别实现 System.Web.IHttpHandler 接口和 System.Web.IhttpHandlerFactory 接口。 <HttpModules> web.config配置文件中configuration\System.Web节中添加下列几行: <HttpModules> <add type="type" name="name" /> </HttpModules> 其中 type 属性为 HttpModule 的标识号和类库名称, name 属性则为该模块取一个较为友好的名称方便 在Global.asax调用 ----------------------------------------------------------------------- <httpHandler> 在web.config文件中configuration\System.Web节中添加<httpHandler>标记: <httpHandlers> <add verb="verb" path="path" type="type" /> </HttpModules> ASP

Spring MVC简介

不羁的心 提交于 2020-01-25 12:25:24
Spring MVC体系概述   Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。Spring MVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理及表单标签绑定等内容。 Spring MVC体系结构   Spring MVC是基于Model 2实现的技术框架,Model 2是经典的MVC(Model、View、Control)模型在Web应用中的变体,这个改变主要源于HTTP协议的无状态性。Model 2的目的和MVC一样,也是利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果,提高系统灵活性、复用性和可维护性。   从接收请求到返回相应,Spring MVC框架的众多组件通力配合、各司其职,有条不紊地完成分内工作。在整个框架中,DispatcherServlet处于核心的位置,它负责协调和阻止不同组件以完成请求处理并返回相应的工作。和大多数Web MVC框架一样,Spring MVC通过一个前端Servlet接受所有的请求,并将具体工作委托给其他组件进行处理,DispatcherServlet就是Spring MVC的前端Servlet。

Weakhandler memory leak

孤者浪人 提交于 2020-01-25 10:49:07
问题 A warning says that handlers must be static or else leaks might occur but I do not know how to make it static, adding 'static' after 'private' does not work either private final WeakHandler<MainActivity> mGenericModelHandler = new WeakHandler<MainActivity>(this) { @Override public void handleMessage(Message msg, MainActivity thisActivity) { try { switch (msg.what) { case ModelBase.BUSY_STATE_CHANGED_NOTIFICATION: if( mModel.error() != null ) { mResultTextView.append("\n Task failed:\n" +

Proxy-代理器(预计vue3.0实现双向绑定的方式)

雨燕双飞 提交于 2020-01-25 04:38:19
todo 常见的基于数据劫持的双向绑定有两种实现,一个是目前Vue在用的 Object.defineProperty ,另一个是ES2015中新增的 Proxy ,而Vue的作者宣称将在Vue3.0版本后加入 Proxy 从而代替Object.defineProperty,本文详细解析了es6中的Proxy方法,严格来讲Proxy应该被称为『代理』而非『劫持』。 Proxy Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“ 元编程 ”(meta programming),即对编程语言进行编程。 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以 对外界的访问进行过滤和改写 。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。 var obj = new Proxy({}, { get: function (target, key, receiver) { console.log(`getting ${key}!`); return Reflect.get(target, key, receiver); }, set: function (target, key, value, receiver) { console.log(`setting

Proxy + Reflect 实现 响应的数据变化

懵懂的女人 提交于 2020-01-25 04:24:11
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等) let p = new Proxy(target, handler); get(target, propKey, receiver) :拦截对象属性的读取,比如 proxy.foo 和 proxy['foo'] 。 set(target, propKey, value, receiver) :拦截对象属性的设置,比如 proxy.foo = v 或 proxy['foo'] = v ,返回一个布尔值。 let handler = { get(target,key) { //如果得到的值是一个对象我们还得再调一次 if(typeof target[key]=='object') { return new Proxy(target[key],handler) } return Reflect.get(target,key); }, set(target,key,value) { if(key==='length') { return true; } update(); return Reflect.set(target,key,value); } }; let obj = { a:{a:1}, b:2, d:[1,2,3,4] }; function update() { console.log(

JavaScript 深入理解proxy

丶灬走出姿态 提交于 2020-01-25 03:58:19
语法:let p = new Proxy(target, handler); 参数: target:用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。 handler:一个对象,其属性是当执行一个操作时定义代理的行为的函数。 作用:使用p对象来代理target对象 1.访问p代理对象时(读/写/new等),实际是通过handle对象中的函数操作target对象。 2.p.prototype等于target.prototype,即通过p代理对象,可以访问到target的原型。 举例: 1. 扩展构造函数的源码 function extend(sup, base) { //sup和base都是构造函数的引用,都有prototype属性,prototype中的constructor指向构造函数本身。 // 获取base.prototype对象的constructor属性的描述符对象:{value: ƒ, writable: true, enumerable: false, configurable: true} var descriptor = Object.getOwnPropertyDescriptor( base.prototype,"constructor" ); //Object.create(proto,

安卓协程异步任务实践

99封情书 提交于 2020-01-25 03:21:44
使用协程的过程中,最常遇到的就是处理异步任务,先来前期的一些动作。设置BaseActivity 这里为什么要用覆写上下文的方式,是因为这里可以加入统一的异常 handler处理,但请注意, 这里的handler 只适用于处理launch 的协程,async的协程异常处理参看最后 open class BaseCorountineActivty : AppCompatActivity ( ) , CoroutineScope { //统一处理协程中异常的报错 val handler = CoroutineExceptionHandler { _ , e -> println ( "协程任务 顶层异常处理" ) } override fun onDestroy ( ) { cancel ( ) super . onDestroy ( ) } override val coroutineContext : CoroutineContext get ( ) = SupervisorJob ( ) + Dispatchers . Main + handler } 然后是测试的Activity, compute挂起函数模拟异步耗时任务 class TestActivity : BaseCorountineActivty ( ) { override fun onCreate (

【tool】远控免杀专题文章-msfvenom隐藏的参数

末鹿安然 提交于 2020-01-24 22:04:49
本节目录如下: msfvenom简介 msfvenom是msfpayload和msfencode的结合体,于2015年6月8日取代了msfpayload和msfencode。在此之后,metasploit-framework下面的的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)都不再被支持。 常规参数 msfvenom所有参数 部分参数解读 -p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的 -l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all -n, –nopsled < length> 为payload预先指定一个NOP滑动长度 -f, –format < format> 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表) -e, –encoder [encoder] 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload -a, –arch < architecture> 指定payload的目标架构,例如x86 | x64 | x86_64