
Android
文章平均质量分 86
风再起时与不羁的风
没有人天生优秀,但我们有一颗执着向上的心!
展开
-
is 32-bit instead of 64-bit动态库错误分析
前段时间因项目需要,需要MP3格式的录音,需要引用LAME开源库,在引用so库文件时,提示java.lang.UnsatisfiedLinkError: dlopen failed: "liblame.so" is 32-bit instead of 64-bit错误,网上分析了出现这种情况的原因,可能是混合使用了32bit和64bit的库文件,如果系统先使用64bit的库文件时,则后续的库文件都原创 2016-07-20 23:07:53 · 7242 阅读 · 1 评论 -
InputManagerService服务的初始化
InputManagerService的初始化InputManagerService的初始化简介初始化流程总结1.简介Android系统的输入事件是由InputManagerService服务来监控的,而InputManagerService是由窗口管理服务WindowManagerService来启动的。WindowManagerService服务是在system_server进程中启动原创 2017-09-30 19:41:07 · 675 阅读 · 0 评论 -
应用程序注册输入事件通道
应用程序注册输入事件通道应用程序注册输入事件通道简介源码分析通过requestLayout函数更新InputManagerService中激活的Activity窗口把Server端输入事件通道注册到InputDispatcher的消息循环中把Client输入事件通道注册到应用程序的消息循环中总结1.简介InputManagerService服务启动以后,就要开始监控输入事件了。当In原创 2017-09-30 19:42:07 · 807 阅读 · 0 评论 -
InputManagerService分发输入事件给应用程序(上)
InputManagerService分发输入事件给应用程序(上)InputManagerService分发输入事件给应用程序上简介源码分析小结1.简介在InputManagerService服务初始化时,会在Native层创建两个线程:InputDispatcherThread和InputReaderThread。InputReader线程负责读取输入事件,并把输入事件传递给InputD原创 2017-09-30 19:43:03 · 642 阅读 · 0 评论 -
InputManagerService分发输入事件给应用程序(下)
InputManagerService分发输入事件给应用程序(下)InputManagerService分发输入事件给应用程序下简介源码分析总结1.简介在InputManagerService分发输入事件消息给应用程序(上)中介绍了InputReader从EventHub中获取输入事件,并对输入事件进行加工处理,然后将输入事件放入到InputDispatcher的mInboundQueue原创 2017-09-30 19:43:50 · 1320 阅读 · 1 评论 -
应用程序注销输入事件通道
应用程序注销输入事件通道应用程序注销输入事件通道简介源码分析总结1.简介当Activity的窗口创建时,它会向InputManagerService注册输入消息接收通道;而当Activity窗口销毁时,它就会向InputManagerService注销前面注册的输入消息接收通道。WindowManagerService在处理处于Stopped状态的Activity窗口时,就会注销它们之前所原创 2017-09-30 19:44:59 · 864 阅读 · 0 评论 -
输入事件ANR原理分析
输入事件ANR原理分析输入事件ANR原理分析简介源码分析总结1.简介当输入事件长时间未响应,则会发生ANR。输入事件ANR超时时间一般为5s。在InputDispatcher分发输入事件的过程中,会监控是否发生了ANR。具体是在执行findFocusedWindowTargetsLocked()方法时,如果当前窗口还未准备好处理输入事件,则会调用handleTargetsNotReadyL原创 2017-09-30 19:45:55 · 1741 阅读 · 0 评论 -
Android输入系统概述
Android输入系统概述Android输入系统概述简介简介在Android系统中,输入事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序处理。当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点, 这便产生了最原生态的内核事件。接着,输入系统取出原生态的事件,经过层层封装后成为KeyEvent或者Mot原创 2017-09-30 19:39:17 · 424 阅读 · 0 评论 -
JobScheduler简介
JobScheduler机制简析1.概述JobScheduler主要用于在未来某个时间下满足一定条件时触发执行某项任务的情况,那么可以创建一个JobService的子类,重写其onStartJob()方法来实现这个功能。JobScheduler提供了接口来调度各种类型的工作,在应用进程中执行。JobInfo里面包含了很多关于工作的信息,可以将JobInfo传递给JobScheduler的schedu原创 2017-12-09 15:52:15 · 15481 阅读 · 0 评论 -
Handler消息机制(native层)
Handler消息机制(native层)Handler消息机制native层简介MessageQueue的native方法nativeInit方法nativePollOnce方法nativeWake方法总结1.简介在介绍Handler消息机制(Java层)时,我们看到了Java层的MessageQueue中调用了几个native方法。除此之外,native层也有一套完善的消息机制,用原创 2017-09-26 23:19:16 · 6338 阅读 · 0 评论 -
Handler消息机制(Java层)
Handler消息机制(Java层)Handler消息机制Java层简介消息循环1 Looperprepare2 Handler的构建3 Looperloop4 MessageQueuenext消息的发送1 HandlersendMessage2 MessageQueueenqueueMessage消息的处理1 HandlerdispatchMessageActivityT原创 2017-09-26 23:15:36 · 15226 阅读 · 2 评论 -
Touch Event事件分发流程
Touch Event的分发Touch Event的分发Activity的dispatchTouchEvent方法PhoneWindow的superDispatchTouchEvent方法ViewGroup的dispatchTouchEventView的DispatchTouchEvent事件点击事件的传递顺序是Activity->Window->View,从上到下依次传递。如果最底层的原创 2017-07-29 13:44:11 · 1177 阅读 · 0 评论 -
AsyncTask源码分析
一、简介 AsyncTask允许你执行后台耗时操作,并将结果发布到UI线程。整个实现过程不需要多个Thread或者Handler。 AsyncTask是被设计来替代Handler与Thread组合的一种方式,它不需要构建通用的线程框架。 AsyncTask理想的情况下是用来执行短时间的操作,例如几秒种操作。如果需要执行一些长时间的耗时操作,推荐使用并发执行框架,例如E原创 2017-05-02 22:57:37 · 270 阅读 · 0 评论 -
WakeLock的介绍与使用
1.什么是WakeLock WakeLock是一种机制,表示应用需要设备保持运行(stay on)。 WakeLock默认是引用计数,如果WakeLock是引用计数的话,则调用了几次acquire()方法,就需要调用对应次数的release()方法才能真正释放掉WakeLock。 如果WakeLock不是引用计数的话,则调用一次release()函数,就可以释放前面调原创 2017-04-21 21:27:38 · 8748 阅读 · 1 评论 -
Android StateMachine实践
我们在实际应用中经常遇到状态设计模式,Android 框架中给我们提供了一个经典的状态模式实现——StateMachine。在StateMachine之前,先来看下状态设计模式定义和UML类图。状态模式:当一个对象的内在状态改变时,允许改变其行为。状态模式中行为是由状态来决定的,不同的状态下有不同的行为。状态模式的意图是让一个对象在其内部状态改变时,其行为也随之改变。状态模式的UML类原创 2017-05-25 22:17:37 · 778 阅读 · 0 评论 -
SparseArray源码解析
1.SparseArray简介 SparseArray的主要作用是将Integers映射到Objects,相当于Map。当需要将Integers映射到Objects时,SparseArray比HashMap更高效。因为SparseArray避免自动装箱keys,并且它的数据结构不依赖于外部的Entry。 SparseArray是在一个数组结构中维护它的映射关系,通过二分查找来查找k原创 2017-04-26 22:11:25 · 348 阅读 · 0 评论 -
NDK环境配置 之Eclipse
在上一篇中介绍了NDK,接下来介绍一下NDK环境的搭建。结合我自己的使用情况,这里会介绍三种NDK环境的搭建,一种是在Eclipse下使用NDK工具编译so库;另外一种是在Android Studio中使用NDK工具编译so库;还有一种是在Linux环境下,通过命令行来生成so库。 1.首先先来介绍在Eclipse环境下,配置NDK编译环境。原创 2016-07-17 00:33:49 · 969 阅读 · 0 评论 -
JNI开发之JNI简介
一、JNI简介 什么是JNI? JNI(Java Native Interface,Java本地接口),用于衔接Java层与Native(C/C++)层。Java可以通过JNI调用本地的C/C++代码,本地的C/C++代码也可以通过JNI调用Java代码。 这不是Android系统所独有的,而是Java所有。众所周知,Java语言是跨平台的语言,而这跨平台的背后都是依靠J原创 2017-05-19 22:19:48 · 528 阅读 · 0 评论 -
JNI开发
最近在学习JNI开发的知识,现将相关的知识总结一下。文章将从JNI简介、JNI原理、JNI常见错误、JNI内存泄露、JNI开发环境搭建、JNI实践这几个部分来分享JNI开发的知识,每一个部分都会以单独的文章来描述。上图是JNI开发知识的一个总的概括,接下来的文章将分别介绍每一个部分。原创 2017-05-19 22:12:09 · 267 阅读 · 0 评论 -
Picasso开源库源码分析
一简介二源码分析1 加载图片11 构造Picasso实例对象12 利用load方法加载图片13 into方法将ImageView传入14 提交任务2 取消加载图片21 Dispatcher发送取消消息22 延迟请求的取消三Picasso关键类图四总结主流的加载图片框架有UIL(Universal-Image-Loader)、Picasso、Glide、Fresco,它们之间的对原创 2017-06-10 16:28:46 · 687 阅读 · 0 评论 -
ArrayMap与SparseArray源码分析
一ArrayMap简介源码分析1 构造方法2 添加元素3 获取元素4 移除元素二SparseArray简介源码分析1 构造方法2 添加元素3 获取元素4 删除元素5 其他方法三总结ArrayMap及SparseArray是android的系统API,是专门为移动设备而定制的。用于在一定情况下取代HashMap而达到节省内存的目的。本文将从源码的角度来分析ArrayMa原创 2017-06-10 18:01:30 · 1617 阅读 · 0 评论 -
LayoutInflater流程
LayoutInflater流程LayoutInflater流程概述源码分析总结概述我们知道LayoutInflater的主要作用是从XML文件中加载布局,其主要是掉用inflate方法来加载布局。一般是通过如下方法使用:LayoutInflater.from(context).inflate(R.layout.xxxx, this);LayoutInflater.from(contex原创 2017-07-29 13:41:23 · 315 阅读 · 0 评论 -
LeakCanary
LeakCanary原理浅析1.LeakCanary简介LeakCanary是一个Android和Java的内存泄漏检测库,可以大幅可以大幅度减少了开发中遇到的OOM问题。LeakCanary开源库的地址为:LeakCanary开源库LeakCanary的README地址如下:LeakCanary的README2.如何使用LeakCanary使用LeakCanary非常简单,只需要在Applicat原创 2017-11-27 21:51:44 · 1185 阅读 · 0 评论