5 Nipuream

尚未进行身份认证

来杯冻柠茶,一起来聊聊技术,怎么样?

等级
TA的排名 7w+

Android系统消息处理机制

Android系统消息处理机制前言在Android应用开发中,主线程一般都是UI操作,子线程去完成一些耗时操作。主线程会一直等待系统或者用户的响应,从而完成对UI的渲染和显示。在学些之前,先了解两个linux的知识点:管道(pipe):管道是一种IPC机制,作用于有血缘关系的进程之间,完成数据传递,调用pipe系统函数可创建一个管道。其本质是一个虚拟文件(实际为内核缓冲区),采用半双工通信...

2020-01-18 23:45:51

Android系统音频模块-数据传输工作

Android系统音频模块-数据传输工作前言在Android系统中,比较大块的数据传输一般都是通过binder和共享内存共同完成的,音频亦是如此。由前面两篇文章所知,音频播放有两种模式,一种是static模式,另一种是stream模式。static模式一般是像铃声、报警音频这种,音频帧所占buffer不多,但是循环播放的情景,这种模式下是由客户端创建共享内存,并一次性写入音频流。然后通过b...

2020-01-15 23:22:22

Android系统音频模块-Native层初始化工作

Android系统音频模块-Native层初始化工作在前面一篇的文章中,我们知道了音频模块Java层所做的一些事情,总的来说还是比较简单的,下面我们继续学习和探索Native层中系统做了什么工作,首先先简单介绍下,Native层采用了C/S的架构方式,AudioTrack是属于Client端的,AudioFlinger和AudioPolicyService是属于服务端的,AudioFlinge...

2018-08-06 22:42:57

Android系统音频模块 - Java 层初始化工作

Android系统音频模块 - Java 层初始化工作前言Android的音频模块相对来说是Android系统中比较简单的一个模块,但是仅仅是相对来说,Android系统中任何一个模块都非常的复杂,但是如果想学习framework相关的知识,我觉得音频模块是一个很好的切入点。Android系统中的音频模块几乎涵盖了Android系统中的所有层次,下图是它的框图:简单的介绍下这张...

2018-08-06 22:41:00

SystemUI 剖析

序言17年上半年主要做车机项目SystemUI的工作,一般的来说可以选择在源码的基础上定制,也可以重新编写。具体选择哪种方案,也要根据自身项目的需求和工作量来考虑,但是不管选择哪种,都需要对SystemUI源码有一定的了解。本文主要先从大体上了解整个SystemUI的运行机制,然后再从状态栏的图标如何显示,下拉菜单是如何的实现,来剖析这个模块的运行原理,最后用一个需求来深入的了解SystemUI模块

2017-10-08 10:10:58

中间件服务实践

序言16年年底,做了一个车载行业的项目,是基于公司的设备对出租车905协议解析保持与平台和设备其他进程保持通信的中间层服务。这个服务我们暂称为TaxiUsi,他和平台以及设备进程以及Client都有通信,且都是双向的,整体来说还是比较复杂的,由于机密问题,这里只给出整体的一个实现思路和流程,作为项目的总结,下面是整体的原理图:可以看到,Client端和外设设备是通过Binder和TaxiUsi进行一

2017-04-02 11:52:56

android 编译打包烧录

搭建环境16年底,从深圳转战到杭州,当然也重新换了份工作,记得刚来的时候非常的辛苦,因为10月份广东还是比较热的,到杭州这边好冷,那时候严重的不适应,很严重的感冒… 这段时间尝试去了解了下源码,还是收获很多的,现在努力学习cpp中,准备往这方面转了。因为新公司都是在源码上编译的,所以或多或少也学习研究了下,记得刚开始下载android源码的时候,那个蛋疼,折腾了我一个多星期,现在写篇文章总结下。

2017-03-12 15:32:33

打造一个万能刷新加载控件

序最近帮一个老总搞一个物流项目,原本想着在这个经济下滑的阶段赚点外快也还不错,结果在开发的过程中并非我开始想象的那么轻松,物流项目的业务还是比较复杂的。什么都不想多说了,先写篇博客压压惊。这次一起打造个万能刷新加载控件,其实刚接触android的时候就有这个想法了,一直都没有付诸行动,这段时间虽然比较累,但是闲暇时间还是将最初的想法实现的差不多了,可能大多数开发者和我一样,每次用列表刷新、加载的控件

2016-10-17 17:42:35

高仿人人车 范围选择器

序最近看到二手车app 三大家的 人人、优信、瓜子的app还真是像啊,有些控件简直一模一样的,例如下面的范围选择器: 瓜子: 人人:优信:个人感觉还是人人做的用户体验最好,所以也实现了个,不过当然是项目需要,不然谁没事吃饱了撑着。感觉和人人仿真度有90%以上吧。 代码有需求的拿走 请star 谢谢apk下载

2016-08-27 20:15:26

最小生成树

Prim算法Prim算法是让从单个顶点出发,使其逐步成长,每次成长都是不在树上的边的值中最小者,而找出一个新的顶点加入这个树中。和有向图的Dijkstra算法处理方式非常相似,唯一的区别就是更新的地方。ArrayList<Edge> Prim(Vertex s){List<Edge> minTree = new ArrayList<>();for each Vertex v{ v.dist =

2016-08-27 17:21:13

最短距离算法

无权最短路径无权图可以把每条路径的权看成是1,求解起来非常简单。这种图的求法一般用广度优先搜索,按层来处理顶点,和二叉树的层序遍历非常类似,如下:<T extends Comparable<? Super T>> void printTree(BinaryNode<T> t){LinkedList<T> list = new LinkedList<>();List.offer(t);while(

2016-08-21 20:48:06

拓扑排序 解题思路

序所谓拓扑排序是对有向无圈图顶点的一种排序,如果存在一条从v到w的路径指向,则在排序中w就出现在v的后面,典型的例子就是大学的选课问题。一般的有两种解题思路,一种是用非递归的方式来实现、另一种则是用深度访问搜索递归实现。 用非递归的方式实现:List<Vertex> sortList = new ArrayList<>();Queue<Vertex> q = new Queue<Verte

2016-08-21 14:27:29

Android 抽奖转盘的实现

序言最近需要实现一个抽奖的控件,我简单搜索了下,感觉要不很多细节地方没有处理,要么,根本就不能用。索性想自己实现个,从千图网搜了下,挑选了个自己比较喜欢的出来,psd打开后效果如下: 最终实现效果如下: 点击Go按钮自动滚动: 随手势滚动: 实现的效果还不错,因为是模拟器加录制,画面可能会有些卡顿,真机其实蛮顺畅的,下面简单的讲讲实现的步骤。实现1,绘制。首先第

2016-08-19 15:10:37

Service 启动和绑定流程

流程图 分析当我们调用startService()方法的时候,其实就是调用了AMS的代理对象执行了次IPC操作,当AMS执行到realStartServiceLocked的时候,执行了 app.thread.scheduleCreateService(r, r.serviceInfo, mAm.compatibilityInfoForPacka

2016-08-11 19:39:38

内部排序 Java实现

比较排序冒泡排序冒泡排序是比较排序中最基础的算法,通过和旁边的元素进行比较上浮,从而进行排序。 public static void bubbleSort(int[] a){ for(int i=0;i<a.length;i++) { for(int j=a.length-1;j>i;j--) {

2016-08-08 21:54:44

Activity 启动流程分析

如何启动每当我们使用startActivity()的时候,系统就会为我们启动个Activity。虽然代码简单,但是Activity的启动是非常复杂的,我们一起去看看: public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) { if (mParent ==

2016-07-08 18:44:31

Android 图片的缓存机制分析

LruCache 初始化 /** * @param maxSize for caches that do not override {@link #sizeOf}, this is * the maximum number of entries in the cache. For all other caches, * this is the max

2016-06-22 11:44:47

Volley 源码解析(二)

图片加载 用过Volley图片加载的老司机们可能对这段代码非常的熟悉:imageLoader.get( url, ImageLoader.getImageListener(iv, R.mipmap.aio_image_default, R.mipmap.aio_image_fail))只要把图片地址、要显示的ImageView给到ImageLoader就可以自动帮你

2016-06-17 17:47:30

Volley 源码解析(一)

心情 来这家公司也有差不多一年的时间了,项目中网络请求部分用到的是Volley,之前都是从别人的博客中了解Volley的用法和他的工作原理。如今项目也写的差不多了,回想起来,知道怎么用,似乎其他的也忘记差不多了,于是,自己想认真看下Volley的源码。先贴张图,看着流程图,也许代码好理解些。 源码解析 1.Volley初始化public static RequestQueue newR

2016-06-14 16:18:36

EventBus3.0 源码解析

基本使用 EventBus是专门为Android设计的用于订阅,发布总线的库,用到这个库的app很多,因为它有很多的优点。比如,它可以简单android组件之间的通信;它可以避免了android四大组件复杂的生命周期处理;它可以让你的代码更为简洁。先一起了解下如何使用,然后在分析它的源码,知道它的工作原理。我们直接来使用EventBus 3.0,3.x主要的一个新的特性就是使用了注解,我们

2016-06-12 15:49:09

查看更多

勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。