自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Nipuream

No mind,pursue dream.

  • 博客(32)
  • 资源 (7)
  • 收藏
  • 关注

原创 硬解直显模式实现抓图功能(二)

## 一、概述上篇文章提到了在Android平台中自己创建和构造外部纹理提供给MediaCodec作为输入端接受解码后的数据,并通过onFrameAvailable()方法的回调来更新纹理,并通过opengl的来渲染和屏幕绑定缓存帧来实现。这样做的好处就是有效的减少cpu和gpu的交互,从而提高应用上的体验。但是如果要实现抓图功能,只是使用glReadPixels()方法需要从显存到内存的交换过程时间作为代价的,笔者亲测,抓一张4k高清图像,需要卡顿渲染线程2秒钟左右的时间,这是万万不能接受的;而且在使

2021-06-06 15:30:37 385 1

原创 硬解直显模式实现抓图功能(一)

一、综述之前做车载行车记录仪的时候,从摄像头拿到yuv数据经过shader脚本转化为rgb数据,再转化为纹理进行渲染。现在做的这个项目数据源主要是流媒体进行解封装获取到的压缩数据,现在Android 的MediaCodec是允许surface作为输入的,结合SurfaceTexture进行updateTexImage(),然后读取到外部纹理,一方面可满足抓图功能的需求,另外也可以通过egl直接交换缓冲区去显示。这只是我们在性能和功能需求实现成本方面一个权衡,因为从gpu拷贝数据到cpu,然后在到虚拟机处理

2021-05-09 17:52:04 459 2

原创 Android JNI编译语法总结

Android现在JNI相关的代码编译成so主要有两种方式,一种是传统的ndk-build,还有就是CMakeLists.txt,接下来总结下Android.mk、Application.mk、CMakeLists.txt文件的语法。Android.mk配置环境变量,定义当前模块的相对路径LOCAL_PATH := $(call my-dir)清空当前环境变量,除 LOCAL_PATH外的所有环境变量include $(CLEAR_VARS)编译生成的目标文件的文件名LOCAL

2020-11-07 21:35:30 452

原创 Android 组件化实践 - 回溯 设计 实现

Android 组件化实践 - 回溯 设计 实现回溯由于去年滴滴频繁出事,国家对出行安全相关的事情非常关注,并且制定了一些行业的标准,用于保障出行安全。我们团队做的是车载智能设备,将国家监管平台和出租车业务串联起来,包括实现平台取流预览对车辆实时监控,还有对历史视频的存储,对司机违规操作图片上传至平台(人脸识别处理),还有对接一些外设相关的业务,包括计价器、顶灯、安全模块,有线报警按钮,可以将运营数据上传至平台,也可以做一些网约车相关的业务。另外还有个MCU处理器,一个对车载设备电源的管理,另外有些城市

2020-08-23 12:23:51 483

原创 Android SharePreferences持久化机制

Android SharePreferences持久化机制SharePreferences作为Android开发中比较常见的持久化工具类,很多人平时工作中没有对它起到足够的重视,包括我。但是互联网公司面试好像很喜欢考察这个知识点,感觉有必要对它进行一个梳理和总结。一、加载 getSharedPreferences@Overridepublic SharedPreferences getSharedPreferences(File file, int mode) { SharedPrefere

2020-07-12 17:33:32 427

原创 Android系统服务死锁、Anr检测机制

Android系统服务死锁、ANR检测机制Android系统运行以后,System_server中可能有成百上千个线程在运行,各种服务之间调用很频繁,也很复杂,难免会出现死锁和长时间未响应的问题。这个问题对于系统来说是非常严重的,因为一旦出现这种情况,会导致一系列的并发症,最终会导致界面卡死,手机耗电急剧上升,发热严重。当然,我们要做的第一步是尽量避免此情况的发生,这种需要大量的测试和实践,An...

2020-04-19 14:02:53 1220

原创 Android Framework 状态机实现原理

Android Framework 状态机实现原理前言状态模式是比较一种常见的设计模式,为了解决某个事物很多状态之间的切换很多的业务逻辑,这样可以避免很多if-else嵌套,不仅提高了代码的可读性,同样拓展性也得到很大的提升。在Android系统中,像wifi、蓝牙的源码中,看到状态机的使用,所以来学习下。状态机是对状态模式的一种拓展,使用了Handler机制来对消息的分发,同时还增加了 st...

2020-03-15 23:03:08 452

原创 Android系统消息处理机制

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

2020-01-18 23:45:51 523

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

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

2020-01-15 23:22:22 625

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

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

2018-08-06 22:42:57 2429

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

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

2018-08-06 22:41:00 1690

原创 SystemUI 剖析

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

2017-10-08 10:10:58 3136

原创 中间件服务实践

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

2017-04-02 11:52:56 1648 1

原创 android 编译打包烧录

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

2017-03-12 15:32:33 6092 3

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

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

2016-10-17 17:42:35 3045 26

原创 高仿人人车 范围选择器

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

2016-08-27 20:15:26 2439

原创 最小生成树

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 897

原创 最短距离算法

无权最短路径无权图可以把每条路径的权看成是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 8942

原创 拓扑排序 解题思路

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

2016-08-21 14:27:29 1091

原创 Android 抽奖转盘的实现

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

2016-08-19 15:10:37 20375 30

原创 Service 启动和绑定流程

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

2016-08-11 19:39:38 2242

原创 内部排序 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 948

原创 Activity 启动流程分析

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

2016-07-08 18:44:31 2720

原创 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 6031 1

原创 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 843

原创 Volley 源码解析(一)

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

2016-06-14 16:18:36 4004 1

原创 EventBus3.0 源码解析

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

2016-06-12 15:49:09 4158 2

原创 生产者-消费者模型在Android开发中的应用

话说生产者-消费者模型可是并发模型中的一个经典案例了,你可能会问,这种并发情况下,一般服务端程序用的比较多把,Android端的应用程序哪有什么并发情况。虽然事实如此,但是构建生产者-消费者模型,是线程间协作的思想,工作线程的协助是为了让UI线程更好的完成工作,提高用户体验。比如,下面的一种情况: 这个是我们平常开发中很常见的一种情景,大量的图片资源的访问,因为图片访问是一个网络耗时的

2016-05-19 15:43:41 3037 3

原创 Android自定义软键盘

前不久由于项目的需要,要做一个自定义的软键盘,我也上网看了很多,都觉得很繁琐,所以想自己动手实现个。以备不时之需把。我选择了参考百度钱包的软键盘,看起来还不错:下面一起来实现它:1.写一个键盘控件,这个实现起来比较简单,就不多说了public class SoftInputBoard extends RelativeLayout implements View.OnClickList

2016-05-05 16:06:31 4075 1

原创 TextView 那些鲜为人知的方法

综述一起先看看官方文档怎么说的: Displays text to the user and optionally allows them to edit it. A TextView is a complete text editor, however the basic class is configured to not allow editing; see EditText for a

2016-01-21 20:13:02 1841 1

原创 Eclipse迁移到Studio遇到的那些坑

为啥要迁移话说Android studio出来已经很长一段时间了,也知道用起来很爽,但是就是懒,不想对公司的项目做很大的变动。可是后来发现,继续用Eclipse真的很不方便,studio有很多的优势所在,下面列举出一二:Android studio是Goggle官方专门为android打造的一款编辑器,其中内置了很多的插件,比如svn,git等等。编写布局文件的可视化,极大的方便我们的开发。如果

2016-01-07 15:32:00 2166

原创 带你彻彻底底弄懂Scroller

Scroller的使用这是一个滑动帮助类,并不可以使View真正的滑动,而是根据时间的流逝,获取插值器中的数据,传递给我们,让我们去配合scrollTo/scrollBy去让view产生缓慢滑动,产生动画的效果,其实是和属性动画同一个原理。

2015-12-28 15:47:04 7233

生产者-消费者在Android开发中的应用

此demo介绍了生产者-消费者模型在android开发中的应用。

2016-05-19

android自定义软键盘

这是一个android自定义键盘的代码,大家可以下载参考下!

2016-05-05

softInputBoard

这是一个android自定义键盘的apk,大家可以下载试运行。

2016-05-05

仿QQ选择城市Demo

这是一个仿QQ 吃喝玩乐里面选择城市列表的一个控件

2016-04-12

仿微信倒序加载图片

这是一个仿微信倒序加载图片的demo,流畅度很好。

2016-02-26

仿QQ滑动删除

这是一个仿QQ滑动删除的demo,希望能够帮助到大家

2015-12-28

仿微信刷新

一个仿微信刷新的demo,希望能够帮助到大家

2015-12-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除