android
文章平均质量分 85
三木仔
纸上得来终觉浅,绝知此事要躬行
展开
-
binder的异常处理
binder的异常处理真的很捉急原创 2020-02-05 16:55:23 · 1157 阅读 · 0 评论 -
App 进程初始化binder、获取ServiceManager服务
数据结构ProcessStateIPCThreadStateApp进程启动Init进程启动了zygote进程、system_server进程、ServiceManager进程、lwkd服务等zygote并没有利用binder通信,而是利用socket接收信息,在执行ZygoteInit.main()后便进入runSelectLoop()循环体内,当有客户端连接时便会执行ZygoteCon...原创 2020-02-05 15:30:06 · 856 阅读 · 0 评论 -
Android Framework层看硬件加速
Android 从Android3.0(API Level 11)开始就支持了硬件加速,在target api >= 14会默认开启,利用GPU代替CPU绘制,软加速是利用Skia,而硬件加速是利用OpenGL绘制。缺点是增加了内存占用。本文只是在java层去看硬件加速,没有深究jni层如何绘制。RenderNode 每个View都有一个RenderNode与之对应Render...原创 2020-01-16 00:52:46 · 444 阅读 · 0 评论 -
ServiceManager与binder驱动的交互
文章目录ServiceManger 的初始化binder_openbinder驱动的BINDER_VERSION命令binder_become_context_managerbinder驱动的 BINDER_SET_CONTEXT_MGR命令binder_loopServiceManager loop流程binder驱动的BINDER_WRITE_READ命令binder_ioctl_write_...原创 2020-01-13 23:29:09 · 435 阅读 · 0 评论 -
binder 驱动的操作
文章目录Binder驱动四个基本操作初始化字符设备打开binder驱动设备mmap 分配 binder_bufferkmalloc、kzalloc、vmallocbinder_mmap未做用户空间和内核空间的映射binder_update_page_range进程跟驱动的操作交互ioctl 基本流程ioctl 命令binder_write_read命令binder_thread_writebind...原创 2020-01-13 23:06:51 · 1121 阅读 · 0 评论 -
RecyclerView 绘制、复用、对比ListView
之前学习ListView是为了更好地学习RecyclerView,没想到拖了这么久。RecyclerView比ListView更加地复杂,主要从两个方面学习:RecyclerView 绘制流程RecyclerView 缓存复用ListView和RecyclerView缓存比较RecyclerView 涉及的类LayoutManager : 负责子View的measure及layo...原创 2020-01-13 22:48:03 · 527 阅读 · 0 评论 -
binder 驱动数据结构
binder驱动中的重要的数据结构hlist_node: linux内核哈希表/hash桶的头结点struct hlist_head {struct hlist_node *first;//指向每一个hash桶的第一个结点的指针};//hash桶的普通结点struct hlist_node {struct hlist_node *next;//指向下一个结点的指针struct h...原创 2020-01-04 21:35:05 · 749 阅读 · 0 评论 -
无侵入获取全局Context的新方式
很多第三方库都需要利用到Context,如何无侵入获取全局Context?原创 2019-12-17 23:37:54 · 452 阅读 · 0 评论 -
Andriod 录屏:AudioRecord、MediaProjection、MediaCodec、MediaMuxer
Android 为开发者提供了MediaRecorder的类,可以帮助录屏。但是重要的缺陷:MediaRecorder控制粒度很粗,无法完成更多的自定义功能,如对音频数据处理MediaRecorder录制的效果很差,特别是音频效果。为了更好的效果,最终决定利用AudioRecord、MediaProjection、MediaCodec、MediaMuxer几个重要的组件进行录屏。这几个组件都涉及到很多的音视频的知识,建议先看之前的音视频相关的文章介绍。原创 2019-12-10 09:20:59 · 3339 阅读 · 4 评论 -
SurfaceFlinger学习之路(三)BufferQueue原理
* SurfaceFlinger:系统服务,接收多个源的数据,对它们进行合成,然后发送到显示设备进行显示。* HWComposer:在没有HWComposer之前,SurfaceFlinger将各个Layer的内容用OpenGL渲染到暂存缓冲区中,最后将暂存缓冲区传送到显示硬件。HWComposer是硬件合成器,帮助GPU做一些工作,SurfaceFlinger把多个Surface输出给hwc, hwc按照Surface的属性, 把多个Surface混合成一个Surface, 最后输出到Display原创 2019-12-13 00:15:01 · 3266 阅读 · 1 评论 -
属性动画原理解析
属性动画属性动画的使用动画监听插值器(Interpolator)估值器(TypeEvaluator)属性动画的两个条件属性动画原理解析原创 2019-11-10 14:27:21 · 654 阅读 · 0 评论 -
SurfaceFlinger学习之路(二)Surface的创建
介绍了View的绘制流程,最后讲到了WMS与SurfaceSession、Surface之间关系。原创 2019-10-31 00:41:43 · 1281 阅读 · 0 评论 -
SurfaceFlinger学习之路(一)View的绘制流程
Android 系统启动流程SurfaceFlinger 创建流程Surface 创建流程Surface 显示流程原创 2019-10-30 00:34:06 · 1853 阅读 · 1 评论 -
Glide原理(三):图片解析处理、ImageView保证大小
Glide 怎么判断解析图片的Glide 怎么保证ImageView宽高?原创 2019-03-22 16:36:21 · 1583 阅读 · 1 评论 -
Android 写一个属于自己的Rxjava(二)
目录Android 写一个属于自己的Rxjava(一)Android 写一个属于自己的Rxjava(二)前言先附上github源码原创 2019-07-25 16:42:59 · 224 阅读 · 0 评论 -
Android 写一个属于自己的Rxjava(一)
之所以想要自己动手写一个简单的Rxjava,并不是想证明自己多厉害,而是借助动手来理解Rxjava的思想和源码,实话实说,Rxjava是我看过的源码里面名字取得最迷糊的。看了三四天,硬是把自己搞迷糊了。相反,我尝试自己做一个简单的轮子,发现其实Rxjava的整体思想和实现并不难,但层层的封装真是让人抓不住头脑。不过,只要抓住规律,其实理解起来还是挺简单的。重点在于分清楚:上游发射事件,下游接收...原创 2019-07-24 09:05:56 · 174 阅读 · 0 评论 -
LinearLayout 绘制流程解析
太久没有好好学习Android的基础知识了,趁机好好静下心来学习、输出。LinearLayout绘制流程RelativeLayout绘制流程ListView原理RecyclerView原理protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mOrientation == VERTI...原创 2019-07-24 09:08:51 · 980 阅读 · 0 评论 -
Android binder连接中,服务端如何知道客户端断开情况
在IPC 利用 binder连接过程中,客户端断连,服务端如何知道呢?这里的客户端和服务端都运行在不同的进程。一般来说,我们使用Android的binder,都直接用aidl帮我们生成java代码,再利用service进行ServiceConnection连接。也许你会说,利用ServiceConnection的onServiceDisconnected()就可以知道断开连接了,可是回想一下...原创 2019-07-12 23:19:30 · 4270 阅读 · 4 评论 -
Android 屏幕刷新机制:ViewRootImpl、Choreographer、Surface、SurfaceFlinger关系
Choreographer VSync SurfaceFlinger原创 2019-06-27 23:49:40 · 2041 阅读 · 1 评论 -
Android 写一个属于自己的音视频播放器
利用Android的SurfaceView + JNI + OpenGL + ffmpeg原创 2019-03-27 18:51:20 · 1340 阅读 · 0 评论 -
Android Context.getSystemService() 与 ServiceManager 的理解和使用
背景这几天在天天在写Context.getSystemService()获取系统服务,例如在获取窗口服务的时候都会这样写:WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);突然萌生一个问题,就是getSystemService() 每次获取的对应的WindowM...原创 2019-08-27 23:00:17 · 5517 阅读 · 0 评论 -
ListView 绘制流程解析
LinearLayout绘制流程解析RelativeLayout绘制流程解析ListView绘制流程解析RecyclerView绘制流程解析絮絮叨叨从年初到现在,一直积攒了好多知识点没有学习和总结,待办越积越多,此时此刻立下flag,要在这个可爱的八月把所有的待办解决掉。---- 鲁迅:不,我没说过背景在我刚开始学习Android的时候,ListView是列表实现的首选项,现在因为...原创 2019-08-02 01:14:04 · 324 阅读 · 0 评论 -
espresso无法测试绑定在WindowManager下的布局
问题出现:espresso是Android官方推荐的UI测试框架,非常强大,但是今天遇到一个问题:onView()无法指定一个直接利用WindowManager.add()的View,抛出一个找不到的异常:android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching网...原创 2019-08-13 23:52:12 · 414 阅读 · 0 评论 -
Retrofit 原理解析与自定义实现
Retrofit结合OkHttp构成了当前非常流行的Android的网络,Retrofit对OKHttp进行了一层封装,可能入手的门槛高一点,但是使用习惯以后可以说是非常的简洁和高效。并且还可以跟Rxjava结合转化成Obserable,这种链式编程风格深得我心。来了解Retrofit的基本源码原理:动态代理获取MethodMethod从提取出注解参数执行网络操作转换成对应结果本...原创 2019-08-14 13:28:35 · 650 阅读 · 0 评论 -
Glide(四):强大的图片缓存池和复用机制
Glide有一个很强大的Glide缓存策略和Glide复用机制,之前在里面栽过跟头,借此好好整理总结。原创 2019-08-27 23:20:20 · 3372 阅读 · 1 评论 -
SystemServer 理解
SystemServer进程,运行多个服务的线程Zygote进程又称受精卵进程,它由app_process启动,Zygote进程最大意义是作为一个Socket的Server端,接收着四面八方的进程创建请求,Android中所有的应用进程的创建都是一个应用进程通过Binder请求SystemServer进程,SystemServer进程发送socket消息给Zygote进程,统一由Zygote进程...原创 2019-10-20 23:53:33 · 685 阅读 · 0 评论 -
DreamService 和 DreamManagerService 问题分析
问题背景Android官方提供了一个DreamService类以实现屏保的功能,内部提供了两个回调:onAttachToWindow()onDetachToWindow()昨天碰到了一个系统性的问题:在启动DreamService屏保之后,系统的其他App直接startActivity()并不会退出屏保,也就是DreamService并不会收到onDetachToWindow()回调...原创 2019-09-01 02:24:06 · 5809 阅读 · 5 评论 -
ANR 原理简要分析
最近碰到ANR的问题,需要分析,啊,ANR的问题真的是难受,即使有trace.txt日志也无法看到端倪,ANR问题有时候真的需要随缘,而且会伴随着系统CPU占用过高、memory占用过多的现象,确实难以定位。据此,花了一些时间学习Android ANR 问题的引发和系统如何检测ANR问题。ANR问题简介常见的ANR问题Service ANR问题InputEvent ANR...原创 2019-09-25 23:40:03 · 1277 阅读 · 0 评论 -
Android Usb获取以及读写
Android 6.0 之后提供了StorageManager支持读写U盘。有部分是hide方法需要利用下反射,以下记录下。读取所有U盘符public static List<UsbDevice> readUsbDevice(Context context) { List<UsbDevice> devices = new ArrayList<>();...原创 2019-10-11 00:36:51 · 1222 阅读 · 0 评论 -
Camera 采集数据通过 GLSurfaceView 预览 (二)
上一篇文章 Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一)中使用了 textureView 进行预览,但是如果想做更多的功能,比如说增加水印、滤镜、离屏渲染等等,这使用 GLSurfaceView 预览更加合适,所以这篇文章是在上一篇的代码的基础上进行修改替换,并且这里不介绍 GLSurfaceView 和 Android GLES 的相关知识。...原创 2018-08-30 11:48:31 · 2548 阅读 · 1 评论 -
如何计算图片旋转角度?
在项目过程中,需要计算本地图片或者网络图片原来的旋转角度。这部分代码是从Glide的DownSampler类的,这里做一下记录。Glide的类ImageHeaderParser中负责解析Image的头部信息,Glide分成两种情况:DefaultImageHeaderParser 默认的头部,是Glide自定义的头部解析器ExifInterfaceImageHeaderParser 利用了...原创 2019-03-22 12:18:35 · 4973 阅读 · 1 评论 -
Glide原理分析(二):Engine加载流程
上一篇文章《》主要大致地分析了Glide加载图片的整体流程,这一篇主要解决的上一篇遗留的一个问题:Glide Engine 如何加载图片,内部涉及到Glide的缓存模块上篇文章在SingleRequest中获取到了ViewTarget的宽高之后(假定是ImageView),onSizeReady()调用了engine的load()方法loadStatus = engine.load( ...原创 2019-03-21 18:49:24 · 969 阅读 · 1 评论 -
Handler、MessageQueue、Looper原理分析
网上有超级多的讲述Handler原理的文章,没办法,还是要自己整理一遍,理解才能更加深刻。因为binder和Handler可以算是Android的基石。按照套路,先抛出自己的问题:子线程怎么创建使用Handler?Looper一直循环怎么没有导致ANR?主线程的Looper在没有消息的时候会被阻塞,那么主线程不会被一直阻塞吗?HandlerThread是什么?以及内部是怎样的?先不...原创 2018-12-26 19:23:54 · 340 阅读 · 0 评论 -
View/ViewGroup 绘制流程和疑惑(一)
Android 知识体系中,有一个很重要的知识就是View/ViewGroup 绘制流程,但每次都是找找资料以为自己理解了,到最后还是存在很多问题,百思不得其解,下面记录自己的疑惑和问题解答。先抛出自己的疑问:View/ViewGroup总体的绘制流程是怎么样的View/ViewGroup是不是每次都会走measure、layout、drawViewGroup为什么不走drawrequ...原创 2018-12-16 01:13:51 · 1384 阅读 · 0 评论 -
ViewGroup/View 事件分发和疑惑
这两天今天重新回看了View/ViewGroup 事件分发,还是有甚多欠缺的,这里记录下自己的学习结果原创 2018-10-21 15:49:04 · 386 阅读 · 0 评论 -
Android Opengles mediaCodec 预览录制视频 添加水印
将外部纹理转化为普通纹理使用pbo叠加水纹纹理(或者其他滤镜等)使用AVO BVO创建EGL环境共享GLSurfaceview EGLContext绘制生成的纹理到Mediacodec创建的Surface中,录制成mp4...原创 2018-09-29 14:30:50 · 7703 阅读 · 9 评论 -
win10 编译 Android ffmpeg
记录下首次成功交叉编译出Android使用的ffmpeg的so文件,主要参考了windows 环境下编译 android 中使用的 FFmpeg和 Android 集成 FFmpeg (一) 基础知识及简单调用环境系统环境: window 10编译工具:Mingw + msysFFmpeg版本:3.3.8NDK版本:android-ndk-r14b流程下载Mingw、msysh...原创 2018-09-29 11:29:40 · 610 阅读 · 0 评论 -
ffmpeg 结构和编解码流程
ffmpeg 结构以及作用:AVUtil: 核心工具库AVFormat:提供了音视频容器格式的封装和解析以及所支持的协议文件格式和协议库AVCodec: 编解码库AVFilter: 音视频滤镜库 如视频加水印、音频变声AVDevice: 输入输出设备库,提供设备数据的输入与输出,如读取摄像头数据、屏幕录制SwrRessample: 音频重采样SWScale: 图像格式转换的模块,yu...原创 2018-10-11 11:09:57 · 3798 阅读 · 1 评论 -
Camera 仿微信相机 利用MediaCodec API 从录制MP4到解析播放
本文是在 Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一) 的基础上,原创 2018-09-15 11:43:34 · 2918 阅读 · 6 评论 -
Camera 采集数据通过 textureview 预览,手动对焦、自动对焦 (一)
上一篇文章主要是想理清 Camera2 的结构,并简单介绍怎么使用 TextureView、SurfaceView 预览数据。其实 Camera2 除了结构比较复杂,但既然是官方强烈推荐,加上又支持了很多新特性,满怀欣喜地准备做下去,可是后面发现了好多坑啊!很多资料不全而且很多手机都不支持 FULL 模式,手头上的 MIUI 也是,无奈只好转战 Camera。这篇文章比较简单,主要是 ca...原创 2018-08-25 23:35:02 · 2938 阅读 · 3 评论