自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (22)
  • 收藏
  • 关注

原创 mediacode学习二

void NuPlayer::Decoder::requestCodecNotification() { if (mCodec != NULL) { sp<AMessage> reply = new AMessage(kWhatCodecNotify, this); reply->setInt32("generation", mBufferGeneration); mCodec->requestActivityNotificat...

2020-10-25 12:35:50 15

原创 mediacodec流程学习

void ACodec::LoadedState::onStart() { ALOGV("onStart"); status_t err = mCodec->mOMXNode->sendCommand(OMX_CommandStateSet, OMX_StateIdle); if (err != OK) { mCodec->signalError(OMX_ErrorUndefined, makeNoSideEffectStatus(err));...

2020-10-24 21:38:32 45

原创 DLNA相关原理

机顶盒作为家庭网络中的一个设备,目前主要只提供IPTV系统的电视功能,为了更好的利用机顶盒资源,将机顶盒改造成为MediaServer,目的在于让家庭网络中的标准UPnP设备能够访问机顶盒的共享资源,从而播放机顶盒中录制的媒体节目或者浏览其图片等。 另外,如果家庭网络中的PC安装了DMS软件,机顶盒也可以通过标准UPnP协议共享PC上的媒体资源。UPnP设备实现媒体资源共享主要通过以下5个基本过程实现:1. 设备寻址:获取网络地址。2. 设备发现:发现家庭网络上的UPnP设备。简单...

2020-10-17 18:54:25 9

原创 Android Phone模块

电话管理是Android系统支持的重要的业务之一,提供拨打电话、接听电话、收发短信、电话薄、网络事件监听、读取用户信息等功能。从下到上可以分为四层:modem驱动层、RILD层、Telephony框架实现层、PHONE应用层,下层为上层提供服务,每层之间采用不同的通讯方式交互。RILD层实现为单独的一个开机启动的进程(rild命令),通过AT命令与modem驱动层交互,TelephonyJAVA框架实现层包括一个RIL抽象层,RIL抽象层中通过一个本地socket与RILD层交互,Ph...

2020-10-15 20:52:19 18

原创 Java内存布局 回收算法

内存回收算法比较:https://blog.csdn.net/wangxiaotongfan/article/details/82389881

2020-10-12 21:26:22 13

原创 Java 基础之堆栈

堆中存什么?栈中存什么? 堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4byte的引用(堆栈分离的好处)。 为什么不把基本类型放堆中呢?因为其占用的空间一般是1~8个字节---需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况---长度固定,因此栈中存储就够了,如果把它存在堆中是没有什么意义的(还会浪费空间,后面说明)。可以这么说,基本类型和对象的引用都是存放在栈中,而且都是几个...

2020-10-12 21:07:06 11

原创 Java 基础学习一

java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte、short、int、long、char、float、double、boolean引用类型包括:类类型、接口类型和数组栈是运行时的单位,而堆是存储的单元。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据,堆解...

2020-10-12 19:50:31 33

原创 运营商概念

国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别一个移动用户所分配的号码。   从技术上讲,IMSI可以彻底解决国际漫游问题。但是由于北美目前仍有大量的AMPS系统使用MIN号码,且北美的MDN和MIN采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以MIN为主。其中以O和1打头的MIN资源称为IRM(International Roaming MIN),由IFAST (International Forum..

2020-10-08 16:40:52 22

原创 Android 7-多窗口加载显示流程

(1)RecentsButton(虚拟键)触发事件长按RecentsButton(虚拟键)会触发KeyButtonView.java的onTouchEvent()方法按下(ACTION_DOWN)后开始计时,如果一段时间ViewConfiguration.getLongPressTimeout()后,没有释放(ACTION_UP)说明用户想长按,于是我们的postDelayed扔出了一个Runnable来进行长按处理。如果在ViewConfiguration.getLongPressTimeout(

2020-09-13 18:49:13 26

原创 inpu超时机制

input的超时检测机制跟service、broadcast、provider截然不同,为了更好的理解input过程先来介绍两个重要线程的相关工作:InputReader线程负责通过EventHub(监听目录/dev/input)读取输入事件,一旦监听到输入事件则放入到InputDispatcher的mInBoundQueue队列,并通知其处理该事件; InputDispatcher线程负责将接收到的输入事件分发给目标应用窗口,分发过程使用到3个事件队列: mInBoundQueue用于记录Inpu

2020-09-13 18:18:31 28

原创 SurfaceFlinger流程学习

// -响应客户端事件,创建 Layer 与客户端的 Surface 建立连接。//接收客户端数据及属性,修改 Layer 属性,如尺寸、颜色、透明度等。//将创建的 Layer 内容刷新到屏幕上。//维持 Layer 的序列,并对 Layer 最终输出做出裁剪计算。详见 https://www.jianshu.com/p/8e7a9a0b5726SurfaceFlinger::SurfaceFlinger()void SurfaceFlinger::onFirstRef(){ ..

2020-09-06 11:08:27 24

原创 Android盒子音视频问题

音频测试所支持的音频格式能够解码播放,播放中可进行快进、快退、暂停、播放、上下曲切换,且声音输出清晰,无偏大、偏小、杂音、卡顿、异常退出。音轨切换问题。蓝牙连接 其他设备输出问题。声音通道测试手机和耳机和蓝牙等外设交互测试,通路需要及时切换到对应设备等问题手段:抓取audiodump speechdump •复现抓取编解码dump •抓取system trace •音频参数tuning •提交case同步分析 抓取Audiodump和speech dump方法 打.

2020-09-05 22:27:56 96

原创 音量调节流程

在分析Android音频系统时,习惯将其实现分为两个部分:数据流和策略。数据流描述了音频数据从数据源流向目的地的过程。而策略则是管理及控制数据流的路径与呈现的过程.AudioTrack、AudioRecord和AudioFlinger可以被划归到数据流的范畴去讨论。而AudioPolicy相关的内容则属于策略范畴。AudioService这个系统服务包含或使用了几乎所的音频相关的内容,AudioService在2.3及以后版本中提供了AudioFocus机制用以结束多个音频应用混乱的交互现状。音频应用在播放

2020-09-05 17:43:03 31

原创 audio 类型及播放策略

AudioFocus焦点异常问题1:1.问题描述听筒收听语音信息的过程中来语音电话,语音消息声音不停止播放。2.定位过程正常流程:1)播放语音消息,会首先requestAudioFocus,同时进行音频焦点的监听,开始播放语音消息;2)播放语音消息的过程中来语音电话,语音电话会去请求音频焦点;根据log:12-25 15:54:18.264 1039 1039 V AudioManager: requestAudioFocusForCall streamType: ...

2020-09-05 12:59:20 147

原创 view学习之二 surfaceview

1.1 surface的使用使用surface时,包含了三个类的使用,分别是surface,surfaceView,SurfaceHolder.Sueface类:每一个surface在系统内部都对应了一段单独的视频缓冲区,surface就是这段缓冲区的一个类描述,可以通过surface提供的方法直接给这段缓冲区上绘图。 SurfaceHolder类:该类是一个接口,主要是抽象出用于控制其对应的surface的标准方法。 surfaceView类:surface本身并不是和GUI协同工作的,GU.

2020-08-23 09:38:35 40

原创 Process 的创建流程

mServices.startServiceLocked -> try { // Before going further -- if this app is not allowed to run in the // background, then at this point we aren't going to let it period. final int allowed = mAm.chec...

2020-08-17 21:57:57 50

原创 通知在fwk中的流程

/** * 发送通知到通知栏 * * @param contentIntent 通知动作 * @param info 通知显示内容 */ private void showNotification(PendingIntent contentIntent, Notice info) { //2、发布到通知栏,让监听者能点击 //获取NotificationManager实例 No...

2020-08-16 19:58:22 54

原创 LruCache使用方法

LruCache 的文档描述A cache that holds strong references to a limited number of values. Each time a value is accessed, it is moved to the head of a queue. When a value is added to a full cache,the value at the end of that queue is evicted and may become eligi.

2020-08-16 18:43:42 72

原创 弱引用理解及使用场景

Car car = new Car(22000,"silver");WeakReference<Car> weakCar = new WeakReference<Car>(car);第一行就是new了一个实例,属于强引用,这个还是很好理解的。下面那一行说是弱引用,可实际上又是怎么用的呢?其实他就是让你的强引用变成了弱引用。接下来,如果你再想引用这个car的话。我举个例子。B b = new B(car);这个B类是接受一个car实例的,有弱引用加持的话,如果你后面这样写car =

2020-08-15 19:42:25 137

原创 检测是否内存泄漏

package com.android.camera.functional;import com.android.camera.CameraActivity;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Environment;import android.os.Process;import android.provider.MediaSt

2020-08-15 19:07:16 47

原创 系统启动之一

public class ZygoteInit {//frameworks/base/core/java/com/android/internal/os/ZygoteInit.javapublic static void main(String argv[]) {…registerZygoteSocket();//注册zygote用的socket…preload();//预加载类和资源…startSystemServer() //启动system_server进程…runSelectLo

2020-08-15 18:18:19 74

原创 wms学习之二

1 APP端建立一个surface空的容器2 APP通过binder将surface给到WMS,请求填充3 wms为了填充surface 向SF申请真正的图层4 sf收到请求后向wms请求分配真正的图层。5将图层信息handler传递给WMS,回传给app层。6 APP控制surface利用surfacecontrol与sf通讯。 @Override public void setAppVisibility(IBinder token, boolean visible) { ...

2020-08-15 14:59:47 647

原创 WMS内部结构学习

WMS 管理window结构WM服务是Android的窗口管理器, 提供了多Window合成, 手势分发等服务.与相应的APP UI进程通过IWindowSession与IWindow接口通信与SurfaceFlinger服务通过SurfaceSession通信, 并向APP UI进程暴露Surface用于绘制UIWM内部维护了一个Session的ArraySet用于记录一系列活跃的, 与客户端通信的会话。 final ArraySet<Session> mSessions =..

2020-08-15 09:11:46 56

原创 view draw 流程分析

之前的relayout 说道返回了mSurface ,int relayoutResult = mWindowSession.relayout(//调用session 中的 relayout,又binder 调用wms relayoutWindow mWindow, mSeq, params, (int) (mView.getMeasuredWidth() * appScale + 0.5f), (int) (...

2020-08-13 21:27:22 41

原创 窗口管理之窗口添加过程

窗口创建过程。窗口的添加流程简化如下,这里暂且忽略窗口的分组管理。APP首先去WMS登记窗口WMS端登记窗口APP新建Surface壳子,请求WMS填充SurfaceWMS请求SurfaceFlinger分配窗口图层SurfaceFlinger分配Layer,将结果回传给WMS, WMS将窗口信息填充到Surface传输到APPAPP端获得填充信息,获取与SurfaceFlinger通信的能力分在activity中创建窗口 和单独创建一个窗口。final void handleR...

2020-08-12 22:25:45 78

原创 InputEvent 事件传递流程之二

当屏幕被触摸之后,linux内核会将屏幕产生的触摸事件封装为event保存到/dev/input/event[x]节点下,接着系统创建的InputReaderThread线程Loop起来让EventHub调用getEvent不断的从/dev/input/节点下读取输入事件,然后InputReader线程将从EventHub读取的事件交给InputDispatch,InputDispatch则将事件分发到x需要的地方.当 MessageQueue 的 next 方法进一步调用 nativePollOn

2020-08-12 21:07:03 86

原创 UI 布局更新流程

UI控件的requestLayout 和invalidate 的调用都会调用到ViewRootImpl 中的scheduleTraversals(); void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalScheduled = true; //同步屏障:往消息队列插入一个同步屏障消息,这时候消息队列中的同步消息不会被处理,而是优先处理异步消息。 ...

2020-08-10 21:32:55 35

原创 硬件渲染UI控件过程

视图的测量,布局和渲染都在ViewRootImpl类中,performTraversals方法,在编舞者的控制下,当App收到刷新命令,实现一次绘制刷新。此处省略 measure layout 。private void performTraversals(){ if (!cancelDraw && !newSurface) {//前面已经过测量与布局,且存在Surface。 performDraw(); } else { ...

2020-08-10 20:57:08 41

原创 7.0StartingWindow  流程分析

一 定制简单的 StartingWindow <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.StartingWindowTheme"> <!-- 应用启动页(StartingWindow)的theme --> <style name="AppTheme.S...

2020-08-09 18:41:51 62

原创 Modem log 关键字查找

PS接入技术Radio log中搜索“<DATA_REG” 08-01 17:24:10.879229 2702 2831 D RILJ : [4020]< DATA_REGISTRATION_STATE {.regState = REG_HOME, .rat = 14, .reasonDataDenied = 0, .maxDataCalls = 9, .cellIdentity = {.cellInfoType = LTE, .cellIde...

2020-08-09 13:26:48 40

原创 handler理解再学习之二

Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞。每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MessageQueue)。如果在创建Handler时不指定与其绑定的Looper对象,系统默认会将当前线程的Looper绑定到该Handler上。在主线程中,可以直接使用new Handler()创建Handler对象,其将自动与主线程的Looper对象绑定;在非主线程中直接这样创建Handler则会报错,因为.

2020-08-09 12:17:31 39

原创 真的必须要在主线程更新UI吗?

一般UI更新都会调用requestLayout 或者invalidate, 自定义view 也要如此 ???。@android.view.RemotableViewMethodpublic void setWidth(int pixels) {mMaxWidth = mMinWidth = pixels;mMaxWidthMode = mMinWidthMode = PIXELS;requestLayout();invalidate();}@Overridepublic void requ

2020-08-09 10:33:36 69

原创 handler理解再学习

android 特有的线程,消息同步:private void testWait(){HandlerThread ht = new HandlerThread(“Camera Handler Thread”);ht.start();//自带Looper 的线程 looper 循环检查消息队列有没有消息, mCameraHandler = new CameraHandler(ht.getLooper()); // 有: 取出来 msg.target

2020-08-08 21:04:34 47

原创 java数据集合类型比较

以下实现函数调用栈打印:public HashMap<StackTraceElement,String> functions=new HashMap<>();RuntimeException runtime=new RuntimeException();runtime.fillInStackTrace();int length = runtime.getStackTrace().length;//多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接

2020-08-08 18:54:55 80

原创 线程池管理和使用

package com.yz.myapplication;public class ThreadPoolManager {private static ThreadPoolManager instance=new ThreadPoolManager();public static ThreadPoolManager getInstance() { return instance;}//线程池private ThreadPoolExecutor threadPoolExecutor;

2020-08-08 18:43:37 34

原创 学习线程同步及锁机制

简单两个线程同步public class ThreadA {//每次进行修改后,线程都会立即将工作内存中修改了的变量回刷到主存中,这样,其他线程读取到的永远是最新的值。这就保证了数据的可见性public volatile boolean flag =false;private Context context;public ThreadA(Context context){this.context =context;}public void doSomething(){while(!flag

2020-08-08 16:03:25 58

原创 0-1背包问题动态规划算法

0-1背包问题给定n个重量为w1w ,价值为v1v 的物品和容量为CC的背包,求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价值最大0-1背包问题指的是每个物品只能使用一次递归方法首先我们用递归的方式来尝试解决这个问题我们用F(n,C)F(n,C)表示将前nn个物品放进容量为CC的背包里,得到的最大的价值。我们用自顶向下的角度来看,假如我们已经进行到了最后一步(即求解将nn个物品放到背包里获得的最大价值),此时我们便有两种选择不放第nn个物品,此时总价值为F(n−1,

2020-08-08 15:50:18 77

原创 ClassLoader的使用方式

public ClassLoader getClassLoader() {synchronized (this) {if (mClassLoader != null) {return mClassLoader;}// …// 创建加载器,创建默认的加载器// zip为Apk的路径,libraryPath也就是JNI的路径mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, libraryPath, mBaseCl

2020-08-08 15:46:35 84

原创 字体生成原理

有时候因为一些项目上的需要,我们要导入自己的字体,这里总结一些自己导入时候的操作(使用开发工具是Android studio):向Android studio里面加入.ttf字体库,在项目的APP中创建assets文件夹,往里面放入ttf字体库,步骤如下:创建好了assets的文件之后将我们需要使用到的字体库导入接下来就可以正常使用了; 先在activity_main.xml中添加一个控件在MainActivity中代码如下:AppCompatTextView testTv = findViewB

2020-08-08 15:29:35 127

原创 FileObserver的应用以及原理

应用: int flags = FileObserver.CREATE | FileObserver.MOVED_TO; mObserver = new FileObserver(REPORT_DIR.getPath(), flags) { public void onEvent(int event, String path) {//事件触发 mHandler.post(new Runnable() { public void run() { scanDir

2020-07-28 21:56:28 35

常用工具下载.rar

数据库工具

2020-06-13

Android学习进阶笔记.zip

Android学习进阶笔记.zipAndroid学习进阶笔记.zipAndroid学习进阶笔记.zip

2020-04-22

Linux源代码情景分析.zip

Linux源代码情景分析.zip

2020-04-22

艺术探索探索.zip

艺术探索探索.zip

2020-04-22

WiFi_netd.zi

WiFi_netd.zi

2020-04-22

安卓学习总结.zip总结

安卓学习总结.zip总结

2020-04-22

ANDROIDkuangjia.zip

框架

2020-04-22

anysoft_txt.zip

大文件txt分割

2020-03-21

skia第三次讲解之显示系统.pptx

skia第三次讲解之显示系统.pptx

2020-03-13

surface讲解.pptx

surface讲解.pptx

2020-03-13

android图形系统简介.pptx

android图形系统简介.pptx

2020-03-13

Android图形引擎2.pptx

Android surfacefligner 图形引擎2.pptx

2020-03-13

MW图形分离接口文档.docx

MW图形分离接口文档

2020-03-12

多窗口管理.pptx

多窗口管理.pptx

2020-03-12

_状态栏透明_.pptx

_状态栏透明_.pptx

2020-03-12

开机注网小结.docx

开机注网小结

2020-03-10

网络切换,重选,小区选择,注网等介绍.docx

网络切换,重选,小区选择,注网等介绍

2020-03-10

Android系统框架异常定位方法探讨.doc

Android系统框架异常定位方法探讨

2020-03-10

Android性能优化总结分析.pptx

Android性能优化总结分析.pptx

2020-03-10

Gallery整体框架及显示流程.pptx

Gallery整体框架及显示流程Gallery整体框架及显示流程Gallery整体框架及显示流程Gallery整体框架及显示流程Gallery整体框架及显示流程Gallery整体框架及显示流程Gallery整体框架及显示流程

2020-03-08

读取SN号(MTK&QCOM).pdf

高通工具如何读取SN号??SN号是Android 系统唯一身份证明高通工具如何读取SN号??SN号是Android 系统唯一身份证明

2020-03-08

jvm内存模型.pdf

Java 基础教程 jvm内存模型

2020-01-28

空空如也

空空如也

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

TA关注的人 TA的粉丝

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