Android
文章平均质量分 84
Nipuream
来杯冻柠茶,一起来聊聊技术,怎么样?
展开
-
硬解直显模式实现抓图功能(二)
## 一、概述上篇文章提到了在Android平台中自己创建和构造外部纹理提供给MediaCodec作为输入端接受解码后的数据,并通过onFrameAvailable()方法的回调来更新纹理,并通过opengl的来渲染和屏幕绑定缓存帧来实现。这样做的好处就是有效的减少cpu和gpu的交互,从而提高应用上的体验。但是如果要实现抓图功能,只是使用glReadPixels()方法需要从显存到内存的交换过程时间作为代价的,笔者亲测,抓一张4k高清图像,需要卡顿渲染线程2秒钟左右的时间,这是万万不能接受的;而且在使原创 2021-06-06 15:30:37 · 461 阅读 · 1 评论 -
硬解直显模式实现抓图功能(一)
一、综述之前做车载行车记录仪的时候,从摄像头拿到yuv数据经过shader脚本转化为rgb数据,再转化为纹理进行渲染。现在做的这个项目数据源主要是流媒体进行解封装获取到的压缩数据,现在Android 的MediaCodec是允许surface作为输入的,结合SurfaceTexture进行updateTexImage(),然后读取到外部纹理,一方面可满足抓图功能的需求,另外也可以通过egl直接交换缓冲区去显示。这只是我们在性能和功能需求实现成本方面一个权衡,因为从gpu拷贝数据到cpu,然后在到虚拟机处理原创 2021-05-09 17:52:04 · 498 阅读 · 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 · 486 阅读 · 0 评论 -
Android 组件化实践 - 回溯 设计 实现
Android 组件化实践 - 回溯 设计 实现回溯由于去年滴滴频繁出事,国家对出行安全相关的事情非常关注,并且制定了一些行业的标准,用于保障出行安全。我们团队做的是车载智能设备,将国家监管平台和出租车业务串联起来,包括实现平台取流预览对车辆实时监控,还有对历史视频的存储,对司机违规操作图片上传至平台(人脸识别处理),还有对接一些外设相关的业务,包括计价器、顶灯、安全模块,有线报警按钮,可以将运营数据上传至平台,也可以做一些网约车相关的业务。另外还有个MCU处理器,一个对车载设备电源的管理,另外有些城市原创 2020-08-23 12:23:51 · 532 阅读 · 0 评论 -
Android SharePreferences持久化机制
Android SharePreferences持久化机制SharePreferences作为Android开发中比较常见的持久化工具类,很多人平时工作中没有对它起到足够的重视,包括我。但是互联网公司面试好像很喜欢考察这个知识点,感觉有必要对它进行一个梳理和总结。一、加载 getSharedPreferences@Overridepublic SharedPreferences getSharedPreferences(File file, int mode) { SharedPrefere原创 2020-07-12 17:33:32 · 459 阅读 · 0 评论 -
Android系统服务死锁、Anr检测机制
Android系统服务死锁、ANR检测机制Android系统运行以后,System_server中可能有成百上千个线程在运行,各种服务之间调用很频繁,也很复杂,难免会出现死锁和长时间未响应的问题。这个问题对于系统来说是非常严重的,因为一旦出现这种情况,会导致一系列的并发症,最终会导致界面卡死,手机耗电急剧上升,发热严重。当然,我们要做的第一步是尽量避免此情况的发生,这种需要大量的测试和实践,An...原创 2020-04-19 14:02:53 · 1293 阅读 · 0 评论 -
Android系统消息处理机制
Android系统消息处理机制前言在Android应用开发中,主线程一般都是UI操作,子线程去完成一些耗时操作。主线程会一直等待系统或者用户的响应,从而完成对UI的渲染和显示。在学些之前,先了解两个linux的知识点:管道(pipe):管道是一种IPC机制,作用于有血缘关系的进程之间,完成数据传递,调用pipe系统函数可创建一个管道。其本质是一个虚拟文件(实际为内核缓冲区),采用半双工通信...原创 2020-01-18 23:45:51 · 568 阅读 · 0 评论 -
Android系统音频模块-数据传输工作
Android系统音频模块-数据传输工作前言在Android系统中,比较大块的数据传输一般都是通过binder和共享内存共同完成的,音频亦是如此。由前面两篇文章所知,音频播放有两种模式,一种是static模式,另一种是stream模式。static模式一般是像铃声、报警音频这种,音频帧所占buffer不多,但是循环播放的情景,这种模式下是由客户端创建共享内存,并一次性写入音频流。然后通过b...原创 2020-01-15 23:22:22 · 684 阅读 · 0 评论 -
Android系统音频模块-Native层初始化工作
Android系统音频模块-Native层初始化工作在前面一篇的文章中,我们知道了音频模块Java层所做的一些事情,总的来说还是比较简单的,下面我们继续学习和探索Native层中系统做了什么工作,首先先简单介绍下,Native层采用了C/S的架构方式,AudioTrack是属于Client端的,AudioFlinger和AudioPolicyService是属于服务端的,AudioFlinge...原创 2018-08-06 22:42:57 · 2509 阅读 · 0 评论 -
Android系统音频模块 - Java 层初始化工作
Android系统音频模块 - Java 层初始化工作前言Android的音频模块相对来说是Android系统中比较简单的一个模块,但是仅仅是相对来说,Android系统中任何一个模块都非常的复杂,但是如果想学习framework相关的知识,我觉得音频模块是一个很好的切入点。Android系统中的音频模块几乎涵盖了Android系统中的所有层次,下图是它的框图:简单的介绍下这张...原创 2018-08-06 22:41:00 · 1722 阅读 · 0 评论 -
SystemUI 剖析
序言17年上半年主要做车机项目SystemUI的工作,一般的来说可以选择在源码的基础上定制,也可以重新编写。具体选择哪种方案,也要根据自身项目的需求和工作量来考虑,但是不管选择哪种,都需要对SystemUI源码有一定的了解。本文主要先从大体上了解整个SystemUI的运行机制,然后再从状态栏的图标如何显示,下拉菜单是如何的实现,来剖析这个模块的运行原理,最后用一个需求来深入的了解SystemUI模块原创 2017-10-08 10:10:58 · 3178 阅读 · 0 评论 -
Android 抽奖转盘的实现
序言最近需要实现一个抽奖的控件,我简单搜索了下,感觉要不很多细节地方没有处理,要么,根本就不能用。索性想自己实现个,从千图网搜了下,挑选了个自己比较喜欢的出来,psd打开后效果如下: 最终实现效果如下: 点击Go按钮自动滚动: 随手势滚动: 实现的效果还不错,因为是模拟器加录制,画面可能会有些卡顿,真机其实蛮顺畅的,下面简单的讲讲实现的步骤。实现1,绘制。首先第原创 2016-08-19 15:10:37 · 20580 阅读 · 30 评论 -
中间件服务实践
序言16年年底,做了一个车载行业的项目,是基于公司的设备对出租车905协议解析保持与平台和设备其他进程保持通信的中间层服务。这个服务我们暂称为TaxiUsi,他和平台以及设备进程以及Client都有通信,且都是双向的,整体来说还是比较复杂的,由于机密问题,这里只给出整体的一个实现思路和流程,作为项目的总结,下面是整体的原理图:可以看到,Client端和外设设备是通过Binder和TaxiUsi进行一原创 2017-04-02 11:52:56 · 1686 阅读 · 1 评论 -
android 编译打包烧录
搭建环境16年底,从深圳转战到杭州,当然也重新换了份工作,记得刚来的时候非常的辛苦,因为10月份广东还是比较热的,到杭州这边好冷,那时候严重的不适应,很严重的感冒… 这段时间尝试去了解了下源码,还是收获很多的,现在努力学习cpp中,准备往这方面转了。因为新公司都是在源码上编译的,所以或多或少也学习研究了下,记得刚开始下载android源码的时候,那个蛋疼,折腾了我一个多星期,现在写篇文章总结下。原创 2017-03-12 15:32:33 · 6148 阅读 · 3 评论 -
打造一个万能刷新加载控件
序最近帮一个老总搞一个物流项目,原本想着在这个经济下滑的阶段赚点外快也还不错,结果在开发的过程中并非我开始想象的那么轻松,物流项目的业务还是比较复杂的。什么都不想多说了,先写篇博客压压惊。这次一起打造个万能刷新加载控件,其实刚接触android的时候就有这个想法了,一直都没有付诸行动,这段时间虽然比较累,但是闲暇时间还是将最初的想法实现的差不多了,可能大多数开发者和我一样,每次用列表刷新、加载的控件原创 2016-10-17 17:42:35 · 3071 阅读 · 26 评论 -
Service 启动和绑定流程
流程图 分析当我们调用startService()方法的时候,其实就是调用了AMS的代理对象执行了次IPC操作,当AMS执行到realStartServiceLocked的时候,执行了 app.thread.scheduleCreateService(r, r.serviceInfo, mAm.compatibilityInfoForPacka原创 2016-08-11 19:39:38 · 2275 阅读 · 0 评论 -
高仿人人车 范围选择器
序最近看到二手车app 三大家的 人人、优信、瓜子的app还真是像啊,有些控件简直一模一样的,例如下面的范围选择器: 瓜子: 人人:优信:个人感觉还是人人做的用户体验最好,所以也实现了个,不过当然是项目需要,不然谁没事吃饱了撑着。感觉和人人仿真度有90%以上吧。 代码有需求的拿走 请star 谢谢apk下载原创 2016-08-27 20:15:26 · 2461 阅读 · 0 评论 -
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 · 1864 阅读 · 1 评论 -
Eclipse迁移到Studio遇到的那些坑
为啥要迁移话说Android studio出来已经很长一段时间了,也知道用起来很爽,但是就是懒,不想对公司的项目做很大的变动。可是后来发现,继续用Eclipse真的很不方便,studio有很多的优势所在,下面列举出一二:Android studio是Goggle官方专门为android打造的一款编辑器,其中内置了很多的插件,比如svn,git等等。编写布局文件的可视化,极大的方便我们的开发。如果原创 2016-01-07 15:32:00 · 2195 阅读 · 0 评论 -
Android自定义软键盘
前不久由于项目的需要,要做一个自定义的软键盘,我也上网看了很多,都觉得很繁琐,所以想自己动手实现个。以备不时之需把。我选择了参考百度钱包的软键盘,看起来还不错:下面一起来实现它:1.写一个键盘控件,这个实现起来比较简单,就不多说了public class SoftInputBoard extends RelativeLayout implements View.OnClickList原创 2016-05-05 16:06:31 · 4100 阅读 · 1 评论 -
生产者-消费者模型在Android开发中的应用
话说生产者-消费者模型可是并发模型中的一个经典案例了,你可能会问,这种并发情况下,一般服务端程序用的比较多把,Android端的应用程序哪有什么并发情况。虽然事实如此,但是构建生产者-消费者模型,是线程间协作的思想,工作线程的协助是为了让UI线程更好的完成工作,提高用户体验。比如,下面的一种情况: 这个是我们平常开发中很常见的一种情景,大量的图片资源的访问,因为图片访问是一个网络耗时的原创 2016-05-19 15:43:41 · 3059 阅读 · 3 评论 -
Volley 源码解析(一)
心情 来这家公司也有差不多一年的时间了,项目中网络请求部分用到的是Volley,之前都是从别人的博客中了解Volley的用法和他的工作原理。如今项目也写的差不多了,回想起来,知道怎么用,似乎其他的也忘记差不多了,于是,自己想认真看下Volley的源码。先贴张图,看着流程图,也许代码好理解些。 源码解析 1.Volley初始化public static RequestQueue newR原创 2016-06-14 16:18:36 · 4050 阅读 · 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 · 862 阅读 · 0 评论 -
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 · 6066 阅读 · 1 评论 -
Activity 启动流程分析
如何启动每当我们使用startActivity()的时候,系统就会为我们启动个Activity。虽然代码简单,但是Activity的启动是非常复杂的,我们一起去看看: public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) { if (mParent ==原创 2016-07-08 18:44:31 · 2747 阅读 · 0 评论 -
EventBus3.0 源码解析
基本使用 EventBus是专门为Android设计的用于订阅,发布总线的库,用到这个库的app很多,因为它有很多的优点。比如,它可以简单android组件之间的通信;它可以避免了android四大组件复杂的生命周期处理;它可以让你的代码更为简洁。先一起了解下如何使用,然后在分析它的源码,知道它的工作原理。我们直接来使用EventBus 3.0,3.x主要的一个新的特性就是使用了注解,我们原创 2016-06-12 15:49:09 · 4215 阅读 · 2 评论