handler

转载:android Handler详细使用方法实例

被刻印的时光 ゝ 提交于 2020-01-08 11:57:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见。本文分为4个简单的例子来学校handler 开发环境为android4.1. Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了。 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 复制代码 代码如下: package com.example.handler1; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import

android 主线程消息队列更新View

不打扰是莪最后的温柔 提交于 2020-01-08 11:50:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 主线程消息队列提供的方法 基本上只要继承自View的控件,都具有消息队列或者handler的一些处理方法,下面是一些handler方法以及被View封装了的方法,其底层用的基本都是handler的api。 举例:查看postDelay的定义 android.view.View public boolean postDelayed(Runnable action, long delayMillis) { final AttachInfo attachInfo = mAttachInfo; if (attachInfo != null) { return attachInfo.mHandler.postDelayed(action, delayMillis); } // Assume that post will succeed later ViewRootImpl.getRunQueue().postDelayed(action, delayMillis); return true; } 通常消息更新的用法如下 方法一 //如果需要延迟更新 new Handler().postDelay(new Runnable(){ public void run() { //在主线程更新数据和UI } },2*1000);

SpringMVC执行流程

感情迁移 提交于 2020-01-08 11:35:38
  Springmvc自出道以来便以其简单易用,功能强大而闻名于java界,借着其亲爹spring的名头迅速流行起来,可怜昔日的老大structs2频频被曝漏洞,加上使用的复杂性,逐渐日暮西山 ,被springmvc所超越。今天我就来带大家探讨一下springmvc的执行过程。先上图:   下面结合源代码和上图来说明: 一:发送请求到DispatchServlet(中央控制器)   Web.xml配置文件: <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>   是不是很熟 悉的感觉,没错这里就是servlet的配置,只不过这个servlet是系统已经实现好的中央控制器:DispatcherServlet. 二:DispatcherServlet(中央控制器)调用HandlerMapping(处理器映射器

Java的动态代理

冷暖自知 提交于 2020-01-08 06:29:35
什么是动态代理(dynamic proxy) 动态代理(以下称代理),利用Java的反射技术(Java Reflection),在运行时 创建一个实现某些给定接口的新类 (也称“动态代理类”)及其实例(对象) (Using Java Reflection to create dynamic implementations of interfaces at runtime)。 代理的是接口(Interfaces),不是类(Class),更不是抽象类。 动态代理有什么用 解决特定问题:一个接口的实现在编译时无法知道,需要在运行时才能实现 实现某些设计模式:适配器(Adapter)或修饰器(Decorator) 面向切面编程:如AOP in Spring 创建动态代理 利用Java的Proxy类,调用Proxy.newProxyInstance(),创建动态对象十分简单。 InvocationHandler handler = new MyInvocationHandler(...); Class proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), new Class[] { Foo.class }); Foo f = (Foo) proxyClass. getConstructor(new Class[] {

多线程的Thread-Per-Message设计模式

怎甘沉沦 提交于 2020-01-07 23:28:31
思路:一个请求创建一个线程 Message消息体 package com.dwz.concurrency2.chapter16; public class Message { private final String value; public Message(String value) { this.value = value; } public String getValue() { return value; } } handler简单版(有几个请求创建一个线程) package com.dwz.concurrency2.chapter16; import java.util.Random; public class MessageHandler { private final static Random random = new Random(System.currentTimeMillis()); public void request(Message message) { new Thread(() -> { String value = message.getValue(); try { Thread.sleep(random.nextInt(1000)); System.out.println("The message will be handle by " +

关于未捕获异常(Uncaught Exception)的处理

99封情书 提交于 2020-01-07 14:07:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们经常使用try..catch进行异常处理,但是对于Uncaught Exception是没办法捕获的。对于这类异常如何处理呢? 回顾一下thread的run方法,有个特别之处,它不会抛出任何检查型异常,但异常会导致线程终止运行。这非常糟糕,我们必须要“感知”到异常的发生。比如某个线程在处理重要的事务,当thread异常终止,我必须要收到异常的报告(email或者短信)。 在jdk 1.5之前貌似无法直接设置thread的Uncaught Exception Handler(具体未验证过),但从1.5开始可以对thread设置handler。 1. As the handler for a particular thread 当 uncaught exception 发生时, JVM寻找这个线程的异常处理器. 可以使用如下的方法为当前线程设置处理器 public class MyRunnable implements Runnable { public void run() { // Other Code Thread.currentThread().setUncaughtExceptionHandler(myHandler); // Other Code } } 2. As the handler for

Flutter应用启动流程分析(三)

亡梦爱人 提交于 2020-01-07 13:57:12
Flutter应用启动流程分析(三) 在创建FlutterView时首先创建了FlutterNativeView,这里先看看FlutterNativeView是怎么创建的; FlutterNativeView实现了BinaryMeeenger接口,下面看一下都有哪些属性 private final FlutterPluginRegistry mPluginRegistry ; private final DartExecutor dartExecutor ; private FlutterView mFlutterView ; private final FlutterJNI mFlutterJNI ; private final Context mContext ; private boolean applicationIsRunning ; FlutterPluginRegistry:实现了PluginRegistry的全部接口,管理Plugin的注册与注销的类。 DartExecutor:平台层与dart层交互执行类, 实现了平台向dart调用, dart向平台的响应功能. FlutterView:这里保存的引用,主要是将底层的渲染与执行周期状态通知给FlutterView。 FlutterJNI:这个类是调用底层本地方法的, JNI的调用都在这里。 接着看构造方法

Android中ProgressBar的使用-通过Handler与Message实现进度条显示

喜你入骨 提交于 2020-01-07 12:09:35
场景 进度条效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。 然后通过 android:max="100" 设置进度条最大值 通过 android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" 设置其位置在底部并设置外边距 关于进度条的样式,参考如下 这里使用的进度条样式是 style="?android:attr/progressBarStyleHorizontal" 完整xml示例代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android

nginx源码分析——http多阶段处理

帅比萌擦擦* 提交于 2020-01-07 07:56:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 多阶段处理概述 nginx将一个http请求分为顺序的多个处理阶段,前一个阶段的结果会影响后一个阶段的处理。例如,ngx_http_access_module模块根据IP信息拒绝一个用户请求后,本应接着执行的其他HTTP模块将没有机会再处理这个请求。 nginx之所以要把http请求的处理过程分为多个阶段,是因为nginx的模块化设计使得每一个http模块可以仅专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同合作完成。这种设计有非常好的简单性、可测试性、可扩展性,然而,当多个HTTP模块流水式地处理同一个请求时,单一的顺序是无法满足灵活性需求的,每一个正在处理请求的HTTP模块很难灵活、有效地指定下一个HTTP处理模块时哪一个。而且,不划分处理阶段也会让HTTP请求的完整处理流程难以管理,每一个HTTP模块也很难正确的将自己插入到完整流程的合适位置中。 nginx依据常见的处理流程将处理阶段划分为11个阶段,其中每个处理阶段都可以由任意多个HTTP模块流水式地处理请求。对于这11个处理阶段,有些阶段是必备的,有些阶段是可选的,当然也可以有多个HTTP模块同时介入同一处理阶段。 2. 多阶段处理相关的结构体 阶段的枚举定义 typedef enum { //

nginx源码分析——http处理流程

对着背影说爱祢 提交于 2020-01-07 07:28:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. http处理流程概述 nginx对于http请求处理的大概流程是:接收客户端发起的连接,然后接收并解析http请求行,接收并解析http头部;再根据配置文件nginx.conf找到相关http模块,使这些模块依次合作处理http请求,最后发送http响应并结束http请求。 在整个http请求处理过程中,nginx通过连接的读写事件,以及定时器机制,异步回调完成其处理流程。 2. http新连接的建立 在 事件模块 一文中我们知道,当新连接建立后会回调对应侦听的处理方法。对于http模块,该回调方法为ngx_http_init_connection。在该方法中,主要完成的事情是:设置连接的读事件回调处理方法为ngx_http_wait_request_handler,设置连接的写事件回调处理方法为ngx_http_empty_handler;然后查看读事件是否已经准备好,即连接对应的套接字缓冲区上是否已经接收到用户的请求数据了,如果是,则直接调用ngx_http_wait_request_handler进入下一处理步骤;如果还没有准备好,则对连接的读事件设置定时器,同时将读事件添加到事件驱动中,等待下一次回调处理。 void ngx_http_init_connection(ngx_connection