【Android进阶】
文章平均质量分 92
小白兔LHao
当你的才华还撑不起你的野心时,就应该静下心来学习 - Brave Rabbit.
敢于创新,敢于迎接挑战,敢于承担责任 能够承受压力.
展开
-
Android native层媒体通信架构AHandler/ALooper机制实现源码分析【Part 3】
承接上一章节分析:【若前一章节没看过,建议先看上一章节】Android native层媒体通信架构AHandler/ALooper机制实现源码分析【Part 2】本系列文章分析的安卓源码版本:【Android 10.0 版本】3.3、AMessage post发送事件消息实现分析其实在AMessage中可以有三种post方式,如下声明:// [frameworks/av/media/libstagefright/foundation/include/media/stagefright/founda原创 2021-04-01 16:37:47 · 698 阅读 · 1 评论 -
Android native层媒体通信架构AHandler/ALooper机制实现源码分析【Part 2】
[Android native层媒体通信架构AHandler/ALooper机制实现源码分析【Part 1】]本系列文章分析的安卓源码版本:【Android 10.0 版本】3、发送消息:ALooper内部线程或其他线程中均可发送消息。【以MediaClock为例】```cpp// [frameworks/av/media/libstagefright/MediaClock.原创 2021-03-31 23:12:43 · 555 阅读 · 0 评论 -
Android native层媒体通信架构AHandler/ALooper机制实现源码分析【Part 1】
彻底理解掌握native层媒体通信架构AHandler/ALooper消息循环机制实现源码分析很久前分析过android java端Handler机制实现源码分析,并手写了该Handler机制的简单实现——【[教你手写android底层Handler消息机制实现框架]】此章节的AHandler机制实现原理和java端大同小异,当然还有另外对应于java层Handler的native层对应实现,以后有时间可以考虑分析下,但实现原理都类似的。[Android native/C++层Thread线程实现源码原创 2021-03-31 22:26:00 · 1262 阅读 · 0 评论 -
Android native/C++层Thread线程实现源码分析
在Android native(C++)层若想要创建一个线程则可以使用android平台native实现的Thread类来创建【当然你也可以直接使用C++标准库实现的std::thread,需引入头文件 #include<thread>,后续有时间再分析该标准库的实现】,而该类做了跨平台线程调用接口的处理和封装,具备了跨平台运行能力。在native层使用该类必须引用android命名空间,因为该类是在android命名空间实现的,并引用该头文件【system/core/libutils/include/u原创 2021-03-30 11:05:56 · 2897 阅读 · 0 评论 -
Android native层DeathRecipient对关联进程(如相关Service服务进程)异常关闭通知事件的监听实现源码分析
Android DeathNotifier 死亡通知监听实现此部分是在分析multimedia整体架构时由于该内容是常用实现内容,因此被抽出来单独进行分析。要阅读本章节需有Binder机制实现原理的大致掌握,推荐可先补充另一章节内容:Android C++底层Binder通信机制原理分析总结【通俗易懂】死亡通知是为了让Bp端能知道Bn端的生死状态定义:DeathNotifier是继承IBinder::DeathRecipient类,主要需要实现其binderDied()来进行死亡通告。注册:bin原创 2021-03-23 16:27:27 · 2657 阅读 · 0 评论 -
【五】Android MediaRecorder C++底层架构音视频处理过程和音视频同步源码分析
前面已经分析到:MPEG4Writer::Track::threadEntry()方法通过循环read()读取到了编码器编码后的音视频数据,再继续往下分析:For循环中代码处理片段分析:1、当读取到的Buffer数据长度为0时,丢弃该数据并释放内存,并且记录0长度帧个数,这种情况在我们前面的分析过程中其实是有的。if (buffer->range_length() == 0) {buffer->release();buffer = NULL;++nZeroLengthFrames;原创 2020-12-09 23:14:58 · 1525 阅读 · 3 评论 -
【四】Android MediaRecorder C++底层架构音视频处理过程和音视频同步源码分析
分析此前未分析完的queue->pushBuffer(mbuf);:首先分析queue变量的来历:Mutexed::Locked queue(mQueue);因此其实就是加锁后的mQueue变量,而该变量就是Queue类型的数据:如下结构:struct Queue { Queue() : mReadPendingSince(0), mPaused(false), mPulling(false) {原创 2020-12-09 23:07:38 · 1403 阅读 · 0 评论 -
【三】Android MediaRecorder C++底层架构音视频处理过程和音视频同步源码分析
若有需要请查看前一章分析:然后分析音频数据源AudioSource的start()方法:status_t AudioSource::start(MetaData *params) {// 加锁多线程操作 Mutex::Autolock autoLock(mLock); if (mStarted) { return UNKNOWN_ERROR; } if (mInitCheck != OK) { return NO_INIT; }原创 2020-12-09 23:00:31 · 1434 阅读 · 0 评论 -
【二】Android MediaRecorder C++底层架构音视频处理过程和音视频同步源码分析
注:基于Android 8.1.0源码版本分析,主要是从分析C++层StageFright框架层的StageFrightRecorder类展开的,并且只分析关键相关问题的源码,其他调用和执行流程可参考上次的《MediaRecorder整体架构浅析》【Android 7.1.2源码版本】。一、 MediaRecorder音视频处理过程(包括了编码处理过程)音视频处理过程图详细分析在下文第3中。2. 音视频Puller处理过程图详细分析在下文第3中。3. 音视频处理过程源码分析(一)、先找原创 2020-12-09 22:53:58 · 2684 阅读 · 7 评论 -
Android C++底层Binder通信机制原理分析总结【通俗易懂】
Android C++层Binder通信:通过transact()方法可以向远端的IBinder对象发出调用,再通过onTransact()函数让你自己的远程对象能够响应接收到的调用。例如MediaRecorder的继承关系(向右箭头表示继承关系,#XXX#中间是关键方法,/斜线表示多继承):客户端:1、MediaRecorder->BnMediaRecorderClient#onTransact()#->BnInterface->BBinder#transact()#(->原创 2020-12-09 21:18:51 · 2529 阅读 · 1 评论 -
教你手写android底层Handler消息机制实现框架
源码分析android底层Handler消息机制,并且教你手写android底层Handler消息机制实现框架的一个简易版本首先看下android底层Handler消息机制的大致流程:1、发送消息:Handler——》sendMessage——》MessageQueue——》enqueueMessage (将消息添加到队列)2、处理消息:Loop——》MessageQueue——》next() (使用消息)——》dispatchMessage——》handleMessage还需要知道:Handle原创 2018-02-27 14:59:03 · 1218 阅读 · 3 评论 -
MVP模式项目架构:泛型高度解耦且避免Activity内存泄漏
MVP模式简介:简称:MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。 ————百度百科MVC和MVP的结构就不讲了,网上很多,简单说一下。MVC:view ---- controller ---- modelMVP:view ---- presenter ---- modelMVP相对于MVC的优点:1、Activ原创 2017-11-07 11:27:27 · 670 阅读 · 0 评论