handler机制

Handler机制源码解析

ぃ、小莉子 提交于 2020-12-17 06:29:26
不多废话 , 上图 : 简单来说 handler 流程就是 handler 在消息池中获取 msg 并发送给 MQ , 再由 Looper 进行轮询在 MQ 中得到待处理的 msg 交由 handler 进行 handleMessage(...); 这里主要涉及到了四个核心类 : Message Handler MessageQueue Looper 那么下面来看看源码里面是怎么实现的 : 1. Message 类 : 用来携带数据的载体 public int what; // 标识 public int arg1; // 携带 int 类型数据 public int arg2; // 携带 int 类型数据 public Object obj;// 携带任意对象数据 long when; // 保存要被处理的时间点 Handler target; // 处理消息的 handler Runnable callback; // 处理消息的回调器对象 Message next; // 用来保存引用的下一个 message( 才能形成链表 ) private static Message sPool; // 存储处理过的消息的池 // 在需要 Message 对象时复用 其中还有recycle()方法 Looper轮询过程中中会用到 2. Handler 类 : 进行消息的发送处理 ,

Android—Camera Framework C/S架构服务请求

一个人想着一个人 提交于 2020-04-06 17:34:47
在前一篇文章 Camera Client/Server的binder IPC机制 中阐述了Android进程间通信binder IPC机制基础,Android Camera基于这个基础设计了Camera Framework Client/Server架构,文中给出了其类图设计。本文从Android 4.4 版本源码入手,分析Camera App向Camera Service请求服务与返回的过程。服务请求的过程从上到下依次要经过三个大的过程:1. Camera App调用Framework Camera类Java API;2. Camera类Java API通过JNI调用JNI层的C++接口函数;3. 基于binder通信设计的Camera IPC通信过程。下面结合代码分析整个服务请求过程。 Camera应用调用Framework Camera类API 在Android Kitkat原生Camera2应用(packages/apps/Camera2/)的PhotoModule, VideoModule, WideAnglePanoramaModule类中用CameraUtil.open()方法来打开Camera。然后依次调用:CameraHolder的open()方法,AndroidCameraManagerImpl的cameraOpen()方法

Android—Camera Framework C/S架构服务请求

时光毁灭记忆、已成空白 提交于 2020-03-15 11:20:03
在前一篇文章 Camera Client/Server的binder IPC机制 中阐述了Android进程间通信binder IPC机制基础,Android Camera基于这个基础设计了Camera Framework Client/Server架构,文中给出了其类图设计。本文从Android 4.4 版本源码入手,分析Camera App向Camera Service请求服务与返回的过程。服务请求的过程从上到下依次要经过三个大的过程:1. Camera App调用Framework Camera类Java API;2. Camera类Java API通过JNI调用JNI层的C++接口函数;3. 基于binder通信设计的Camera IPC通信过程。下面结合代码分析整个服务请求过程。 Camera应用调用Framework Camera类API 在Android Kitkat原生Camera2应用(packages/apps/Camera2/)的PhotoModule, VideoModule, WideAnglePanoramaModule类中用CameraUtil.open()方法来打开Camera。然后依次调用:CameraHolder的open()方法,AndroidCameraManagerImpl的cameraOpen()方法

Android ImageView

瘦欲@ 提交于 2020-02-29 19:48:26
ImageView   ImageView,图像视图,直接继承自View类,它的主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和着色的一些操作。   ImageView的一些常用属性,并且这些属性都有与之对应的getter、setter方法: android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片的长宽比。 android:maxHeight:设置ImageView的最大高度。 android:maxWidth:设置ImageView的最大宽度。 android:scaleType:设置所显示的图片如何缩放或移动以适应ImageView的大小。 android:src:设置ImageView所显示的Drawable对象的ID。   对于android:scaleType属性,因为关于图像在ImageView中的显示效果,所以有如下属性值可以选择: matrix:使用matrix方式进行缩放。 fitXY:横向、纵向独立缩放,以适应该ImageView。 fitStart:保持纵横比缩放图片,并且将图片放在ImageView的左上角。 fitCenter:保持纵横比缩放图片

高性能Server---Reactor模型

◇◆丶佛笑我妖孽 提交于 2020-02-28 07:30:09
转载自: http://www.jianshu.com/p/2461535c38f3 无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮件用的Outlook,Foxmail等 你看视频用的优酷,土豆等 你写文档用的Office365,googleDoc,Evernote等 你浏览网页用的IE,Chrome等(B/S是特殊的C/S) ...... C/S架构的软件带来的一个明显的好处就是:只要有网络,你可以在任何地方干同一件事。 例如:你在家里使用Office365编写了文档。到了公司,只要打开编辑地址就可以看到在家里编写的文档,进行展示或者继续编辑。甚至在手机上进行阅读与编辑。不再需要U盘拷来拷去了。 C/S架构可以抽象为如下模型: C就是Client(客户端),上面的B是Browser(浏览器) S就是Server(服务器): 服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务 C/S架构之所以能够流行的一个主要原因就是网速的提高以及费用的降低,特别是无线网络速度的提高。试想在2G时代,大家最多就是看看文字网页,小说什么的。看图片,那简直就是奢侈!更别说看视频了! 网速的提高,使得越来越多的人使用网络,例如:优酷,微信都是上亿用户量,更别说天猫双11的瞬间访问量了!这就对服务器有很高的要求!能够快速处理海量的用户请求

IO模型区别:

我与影子孤独终老i 提交于 2020-02-12 22:44:51
4.1.20 1)原生NIO的问题 (1)NIO的类库和API复杂,使用麻烦,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等; (2)需要具备其它的额外技能: 熟悉java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉, 才能编写出高质量的NIO程序; (3)开发工作量和难度都非常大,例如:客户端面临断线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等; (4)JDK NIO bug: Epoll的bug导致Selector空轮询,导致cpu 100%,直到jdk 1.7该版本的问题依然存在,没有被根本解决; 2)Netty优点: (1)设计优雅,适用于各种传输类型的统一API阻塞和非阻塞Socket,基于灵活可扩展的事件模型,可以清晰的分离关注点,高度可定制 的线程模型,单线程,一个或多个线程池; (2)使用方便,详细记录的javadoc,用户指南和实例,没有其他依赖, jdk5-->netty 3.x jdk6-->netty 4.x就足够了; (3)高性能、吞吐量更高,延迟更低,加上那号资源消耗,最小化不必要的内存复制; (4)安全、完整的SSL/TLS和StartTLS支持; (5)社区活跃,不断更新,版本迭代周期短,发现的bug可以被及时修复,同时

c++ new 与malloc有什么区别

◇◆丶佛笑我妖孽 提交于 2020-02-11 09:26:03
转自:https://www.cnblogs.com/ywliao/articles/8116622.html new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。 那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。 特别的,new甚至可以不为对象分配内存!定位new的功能可以办到这一点: new (place_address) type place_address为一个指针,代表一块内存的地址。当使用上面这种仅以一个地址调用new操作符时,new操作符调用特殊的operator new,也就是下面这个版本: void * operator new (size_t,void *) //不允许重定义这个版本的operator new

SAP CRM AXT Genil handler

不问归期 提交于 2020-02-06 15:10:42
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeF93a5D-1580967253484)(https://upload-images.jianshu.io/upload_images/2085791-341885bdca7f0980.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bv2oxdWq-1580967253488)(https://upload-images.jianshu.io/upload_images/2085791-45c9d48ab1621b21.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZz6ecxh-1580967253488)(https://upload-images.jianshu.io/upload_images/2085791-d6336419514bbe1c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] 来源: CSDN 作者: 汪子熙 链接:

Android中的消息处理机制

血红的双手。 提交于 2020-02-01 18:55:02
安卓中的消息处理机制主要涉及到5个概念 (1)消息类:Message,可以理解成一个数据单元; (2)消息队列类:Message Queue,存放通过Hander发布的消息,处理顺序类似于队列,按照先进先出的顺序执行; (3)消息操作类:Handler,用于处理包装在Message中的数据; (4)消息通道类:Looper,它是Message Quene和Handler的桥梁,循环取出Message Quene中的Message交给相应Handler处理; (5)线程:UI thread,每一个线程可含有一个Looper对象以及一个Message Quene数据结构; 处理流程大致如下: (1)包装Message对象(把数据封装在Message对象中); (2)通过Handler的sendMessage()等方法把Message发送出去; (3)在Handler的处理方法中将Message添加到Handler所绑定的Looper的MessageQuene上; (4)Looper的loop()方法通过循环不断地从MessageQuene中提去Message进行处理,并移除处理完的Message (5)调用Message绑定的Handler对象的dispatchMessage()方法完成对消息的处理。 来源: https://www.cnblogs.com/liuleliu/p

Android四大组件之Service

不羁岁月 提交于 2020-01-24 05:06:30
在 Android 四大组件之中,除了 Activity 之外,最常用的就是 Service 了。先来看一下官方对 Service 的介绍 : Service是一个可以在后台执行需要长时间运行的操作的应用组件,它不提供用户界面。其它组件可以启动一个Service ,之后即使用户切换到别的应用里,这个Service 也将继续在后台运行。此外,一个组件可以与一个Service绑定来与之交互,甚至可以进行进程间通信。服务可以在后台执行很多任务,比如处理网络事务,播放音乐,文件读写或者与一个内容提供者交互等等。 由此可见,Service 的用途还是十分广泛的,我们在开发中经常会用到 Service,所以应该对 Service 有一定的了解。 Service 有一个非常需要注意的地方就是它其实是 运行在主线程中的 ,如果是刚了解 Service 的人,很容易会误以为 Service 是另开一个新线程运行的。所以我们一定要注意,不要在 Service 中执行一些耗时操作,从而导致线程阻塞。 想要了解Service,那么就要先了解Service的生命周期,幸运的是,Service的生命周期比起Activity要简单的多。如下 : 上图展示了 Service 在两种形式下的生命周期。下面说明 Service 的两种形式 : 未绑定形式 Service: 该形式的 Service 是通过