自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android 12 变更与新特性

Date:2021.7文章目录Android 12新特性总结一、设置二、通知1. 媒体控制界面2. 媒体控制3. 休眠功能4. 通知界面更新5. trampoline三、消息框Toast四、模糊处理五、应用启动体验改进六、滚动拉伸效果七、AVIF图像支持八、媒体1. 音频过渡2. 音频耦合触感效果3. 多声道音频4. 视频编码改进九、隐私和安全1. 麦克风和摄像头2. 附近设备权限3. 近似位置4. 隐私仪表板 (Privacy Dashboard)5. WebView 中的现代 SameSite c.

2021-07-26 10:18:34 8280 1

原创 SystemUI Recent实现流程

文章目录一、Recents实现逻辑跟踪二、Recent的触发跟踪三、流程时序图一、Recents实现逻辑跟踪Recents对象继承于SystemUI对象,并实现了CommandQueue.Callbacks的重写方法和父类对象的方法重写public class Recents extends SystemUI implements CommandQueue.Callbacks构造方法public Recents(Context context, RecentsImplementation i

2021-07-19 13:32:01 738

原创 如何根据binder client端查找binder server端?

发生SWT时,backtrace经常会卡在binder client端等待binder server端返回:IPCThreadState::waitForResponse-->IPCThreadState::talkWithDriver需要找到server端的pid才能进行下一步分析方法一:常规方法根据binder client thread的sysTid在SYS_BINDER_INFO/SWT_JBT_TRACES中查找binder通信对端,关键字“outgoing transaction

2021-05-16 19:02:17 2141 1

原创 Android ANR机制的原理以及问题分析(三)

文章目录一、前言二、Broadcast Timeout三、Broadcast 设置 定时器四、Broadcast 重置 定时器五、Broadcast 触发ANR一、前言上一篇我们对Service类型的ANR做了介绍,本篇我们将集合源码,对四种ANR类型中的Broadcast Timeout类型的触发机制做详尽的介绍。二、Broadcast Timeout在ActivityManagerService 中,构造了两种Broadcast timeout,分别是 前台FG 10s和后台BG 60s.m

2021-05-16 18:28:34 480

原创 Android ANR机制的原理以及问题分析(二)

文章目录一、前言二、Service Timeout三、 Service 设置定时器四、Service 重置定时器五、Service触发ANR六、总结一、前言ANR⼤致划分为Service、Broadcast、InputDispatch、Provider四中类型,下⾯⼀⼀解释他们各⾃的监测原理。本篇我们将集合源码,对四种Service类型的触发机制做详尽的介绍。二、Service TimeoutService Timeout是位于”ActivityManager”线程中的ActivityManage

2021-05-13 23:44:19 735 7

原创 Android ANR机制的原理以及问题分析(一)

文章目录一、前言二、 ANR的类型三、臭名昭著的ANR一、前言Android开发人员对ANR应该毫不陌生——Application Not Responding,即应用程序未响应。ANR的核心原理是消息机制的调度和超时处理,它要求主线程在限定时间内做完任务处理,比如:启动Activity/Service、发送广播、ContentProvider查询、Input事件分发等,否则就可能发生ANR引起性能问题。处理超时时,系统会认为当前主线程已经失去响应其他操作的能力。这些耗时操作包括:密集的CPU运算、大量

2021-05-13 22:47:12 1871 1

原创 Handler延时消息的实现机制

Handler是如何实现延迟消息的?针对这个问题,我们从源码的角度来剖析一下Handler延时消息的实现逻辑.handler核心的发送消息的方法是sendMessage,有的朋友会说那post呢?PS:post的话其实算是一个handler的语法糖,传入runnable后帮助我们构建一个message/** * Causes the Runnable r to be added to the message queue. * The runnable will be run o

2020-09-07 16:46:06 1195

原创 HandlerThread的使用场景和用法

相信很多同学都听说并使用过HandlerThread、Thread、Handler,但具体对这三种的用法和区别你真有认真总结过吗?本文帮你区别并了解三者的基本用法。Thread基本用法Thread类实现了Runnable接口,必须重写run()方法;//匿名内部类形式new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated

2020-09-07 14:59:10 16260 25

原创 Android Q关闭数据开关可以发送彩信

[DESCRIPTION]Android Q版本默认设计是关闭数据开关之后,无法发送彩信。如果想在data disabled的情况下MO MMS, 请参考以下修改[SOLUTION]需要修改三处vendor/mediatek/proprietary/frameworks/opt/telephony/src/java/com/mediatek/internal/telephony/dataconnection/DataConnectionExt.javapublic boolean isDataA

2020-07-30 14:43:17 470

原创 如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式,号码范围)

[DESCRIPTION]如果需要修改google libphonenumber里的meta data (比如国家的local emergency number, number format, 号码归属地),可以根据以下SOP进行修改。[SOLUTION]修改步骤:查看使用的版本信息,版本信息路径:external/libphonenumber/README.versionEx:Version: 8.3.3从github下载对应的libphonenumber版本,github路径:ht

2020-06-05 11:46:15 795 1

原创 如何修改本地紧急号码规则(Local Emergency Number)

[DESCRIPTION]除了xml里配置紧急号码(ecc_list.xml), SIM卡预置ECC, 网络下发的ECC, 目前MTK检查紧急号码的还会通过libphonenumber的判断是否是本地紧急号码(local emergency number). 这类紧急号码会在UI上显示紧急号码,但是实际以普通号码(normal call)的方式发送到网络。针对某些特别的运营商如果不想要这类号码显示为紧急号码,可以根据以下步骤进行修改。Google local emergency number的最新规则

2020-06-05 11:40:20 1204 1

原创 Android Q紧急号码配置

文章目录适用版本配置方法如何更新AOSP eccdata举例1. 客制化特定国家的紧急号码2. 客制化特定运营商的紧急号码3. 客制化特定大区的紧急号码4. 客制化假紧急号码5. 客制化有卡紧急号码(无卡不是紧急号码)Q上新增功能6. 客制化无卡紧急号码(有卡不是紧急号码)适用版本Android 10(Q)及以后版本配置方法从Android Q开始,google提供了新的紧急号码配置方法(packages/services/Telephony/ecc), 同时MTK还支持通过ecc_list.xml

2020-06-05 10:53:30 1908

原创 Windows登录FTP服务器方法

介绍两种在window下登录ftp服务器的方法1. 使用FileZilla登录FTP服务器1.1 下载FileZilla软件并安装下载链接:https://www.filezilla.cn/download/client可以根据不同的系统选择不同平台的安装包并安装下载1.2 使用FileZilla软件添加站点并填写登录信息打开FileZilla软件,主界面如图所示点击工具栏的file -> Site Manager点击左下方的New site添加一个新的站点,点击Raname.

2020-06-04 10:54:07 13945

原创 Java中String相关方法的最全用法

文章目录1. public int length ()2. public String concat (String str)3. public char charAt (int index)4. public int indexOf (String str)5. public String substring (int beginIndex)6. public String substring (int beginIndex, int endIndex)7. public char[] toCharArr

2020-05-26 15:31:33 308

原创 自动背光调节下亮度条无法到达最左端

文章目录[DESCRIPTION][SOLUTION]1. 拿到背光曲线的配置表:2. 根据配置表去查看代码中背光曲线的mapping配置3. 复现问题,尝试dump PMS的信息4. 修复问题[SUMMARY][DESCRIPTION]根据测试描述和本地测试,复现步骤和现象如下:用遮光板遮挡 L-sensor,亮度条无法到达最左端手动滑动亮度条到最左端,再重复上一步骤,亮度条可以到最左端恢复出厂设置,清除数据等操作均无法保证在 L-sensor 被遮挡时进度条到最左边[SOLUTION]

2020-05-25 15:41:30 1024 1

转载 Android自动背光调节机制分析

文章目录1. 手动背光调节1.1 在Settings/SystemUI中手动调节2.自适应背光调节2.1 类架构2.2 创建背光样条曲线2.3.AutomaticBrightnessController的初始化2.4 AutomaticBrightnessController的配置2.4.1 setBrightnessConfiguration():2.4.2 setDisplayPolicy()2.4.3 setAutoBrightnessAdjustment()2.4.4 setScreenBright

2020-05-25 14:44:23 9405 1

原创 Enhancement 4G mode流程

文章目录1. About Enhancement 4G mode2. Set on/off3. Save4. Setting on/off flow:5. 流程时序图1. About Enhancement 4G modeuse LTE services to improve voice and other communications2. Set on/offSettings->more->cellular networks->VoLTE3. Savethe setting

2020-05-22 17:40:43 533

原创 【VoLTE】增强型4GLTE开关默认处于关闭状态如何实现

[DESCRIPTION]MTK默认的版本中,Setting里面的增强4GLTE开关(VoLTE)默认是开启的,根据运营商的定制需求,想要将其默认设置为关闭状态[SOLUTION](1)package com.android.providers.settings;DatabaseHelper.javaloadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED, ImsConfig.FeatureValueConstants.ON);(两处

2020-05-21 17:53:52 1462

原创 Android中延时执行的实现

第一种new Thread(new Runnable() { public void run() { //sleep设置的是时长 Thread.sleep(3000); //TODO //如果是更新UI,可以延时发送异步消息到主线程通知更新 //handler.sendMessage(); }}).start涉及到更新UI或者可以这样:handler.sendMessageDelayed(messa

2020-05-19 10:54:55 455

原创 Zygote如何fork一个进程

文章目录1. Android系统启动流程图2. fork过程的流程图和调用堆栈3. Zygote fork过程源码跟踪4. fork成功之后ActivityThread及后续5. 小结上一篇我们对Launcher启动的过程做了一个跟踪,跟踪到AMS通过socket向Zygote请求fork新进程之后就停止追踪了,现在我们单独写一篇,接着上一篇,当然也不仅仅是针对Launcher,对进程的fork...

2020-05-07 11:24:35 1911

原创 Launcher启动过程分析

在systemReady()

2020-05-06 16:37:10 536

原创 Android项目如何预置apk

文章目录前言四种预置情况的实现1. 如何将带源码的APK预置进系统?2. 如何将无源码的 APK 预置进系统?3. 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?4. 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?前言如何将带源码的 APK 预置进系统?如何将无源码的APK预置进系统?如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?如何预置...

2020-04-30 15:45:46 569

原创 Linux下diff/patch的生成和打入

文章目录1、关于diff和patch的理解2、diff如何生成补丁文件3、patch如何将补丁打入目标文件1、关于diff和patch的理解diff:是对两个集合的差运算patch:是对两个集合的和运算2、diff如何生成补丁文件diff A B > C 表达了C= A-B;A 表达了原始文件,B 表示修改后的文件。 C 表示补丁文件由于历史原因,diff有三种格式:正...

2020-03-10 16:50:06 1357

原创 Google商店中下载安兔兔评测,后下载3D资源插件,提示“您的设备与此版本不兼容”

文章目录背景描述解决过程总结uses-featureuses-libraryuses-permission背景描述该问题起因是,在Google Play Store商店下载了安兔兔评测应用,在进行3D测试时,提示需要下载安兔兔3D评测应用,点击跳转到谷歌商店,商店提示“您的设备与此版本不兼容”解决过程在终端使用aapt dump badging antutu_3D.apk >a...

2019-09-02 11:45:45 1939

原创 Binder 内存映射和接收缓存区管理

文章目录1. 传统IPC方式的数据传送原理2. Binder采用的IPC策略3. Binder一次拷贝的秘密在回答题目的问题之前,首先有几个问题,请读者思考一下。抛开Binder不谈,传统的IPC方式中,数据是怎样从发送端到达接收端的呢?Binder是使用什么样的策略实现IPC的?Binder一次拷贝的秘密是什么?带着问题,我们来看看Binder通信的原理,找找题头问题的答案:...

2019-08-30 15:50:19 1263

原创 adb调试之am命令详解

文章目录概述am 命令am 命令列表Activity 启动命令trim-memory 命令Intent 参数1. 常用参数2. Extra 参数3. Flags 参数概述作为一名开发者,相信对adb指令一定不会陌生。那么在手机连接adb后,可通过am命令做很多操作:拨打电话:通过adb,可以直接拨打电话10086adb shell am start -a android.intent....

2019-08-01 18:11:16 4430

原创 adb命令使用指南

设备操作相关命令作用adb devices显示连接到计算机的设备adb shell进入设备的shell界面,多个设备情况下:adb -s <设备序列号> shellexit退出设备的shell界面adb reboot重启设备adb kill-server终止adb服务进程adb start-server重启adb服务进程...

2019-07-19 17:22:14 740

原创 dumpsys命令使用指南

文章目录简介命令格式实例演示adb shell dumpsys activityadb shell dumpsys activity topadb shell dumpsys activity activitiesadb shell dumpsys 「PackageName」adb shell dumpsys meminfo 「PackageName」总结简介dumpsys是一种在Androi...

2019-07-19 16:18:04 1429

原创 Java 8 中lambda表达式的使用

Lambda表达式是Java SE 8中一个重要的新特性,需要Java 8或以上版本的jdk环境才可使用文章目录lambda表达式简介基本语法简单例子基本例子foreach循环中使用lambda使用匿名内部类中使用lambda表达式lambda表达式简介Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。基本语法...

2019-07-18 11:09:23 163

原创 Android获取栈顶的应用的PackageName

有时候我们需要判断栈顶的应用是否是我们的应用,于是获取栈顶的应用包名的需求就出现了在android5.0之前,系统有提供API借口用于获取TopActivity包名:ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);String curr...

2019-07-08 18:09:40 1773

原创 拨号流程分析(第五篇)

本文基于Android 8.0文章目录IConnectionService服务的响应过程1. onBind服务被绑定的响应方法2. addConnectionServiceAdapter设置Adapter3. createConnection继续发送拨号请求TeleService拨号流程RIL真机调试日志TelecomAdapter接收消息回调拨号流程总结IConnectionServic...

2019-06-12 18:24:09 1279

原创 拨号流程分析(第四篇)

本文基于Android 8.0文章目录继续分析CallsManager.placeOutgoingCall继续分析CallsManager.placeOutgoingCall我们再次回到Telecom应用的拨号流程中, CallsManager分别调用startOutgoingCall和placeOutgoingCall。startOutgoingCalI方法将通过绑定服务和调用其服务接...

2019-06-12 16:22:52 605

原创 拨号流程分析(第三篇)

本文基于Android 8.0InCallService服务的响应过程InCallService服务的响应过程1. OnBind服务被绑定的响应方法2. InCallService的onBind流程3. setlnCallAdapter设置Adapter4. setlnCallAdapter流程图(InCallService类)5. addCall增加主动拨号Outgoing Call6. l...

2019-06-11 17:44:03 878

原创 拨号流程分析(第二篇)

本文基于Android 8.0文章目录ITelecomService接收拨号请求服务CallsManager处理拨号流程1. CallsManager.startOutgoingCall2. CallsManager.addCall3. lnCallController.onCallAdded消息回调Telecom拨号流程图ITelecomService接收拨号请求服务上一节我们分析到T...

2019-05-24 16:35:28 850

原创 拨号流程分析(第一篇)

本文基于Android 8.0打开手机通话应用的拨号盘我们使用 adb logcat -vtime -b events命令抓取打开电话应用的log,打出的log如下:I / am_new_intent ( 797): [0 , 69578539 , 51 ,com.android.dialer/.app .DialtactsActivity, android .intent . acti...

2019-05-24 12:36:54 1409

原创 PhoneApp的启动过程

本文代码基于Android 9.0概述这里讲的PhoneApp启动过程其实是讲Telephony应用框架层的启动过程。Phone实例是Telephony框架对象,可以向该对象发起各种通讯相关的请求,Phone对象是Telephony整个框架的核心,负责与抽象出的中间层RIL交互,进而间接与modem端进行交互。Phone对象是在PhoneApp这个application初始化过程中被创建...

2019-05-08 15:43:53 1534

原创 VoiceCall流程解析

文章目录概述框架VoiceCall框架图流程相关主要代码介绍VoiceCall相关的基本概念主动呼叫(MO)流程被动接听(MT)流程本文章代码基于Android 9.0概述VoiceCall就是我们通常所说的打电话是基于系统中Telephony框架的具体应用情景,Telephony中涉及的其他通讯功能有ServiceState(服务状态)、DataConnection(数据链接)、SMS...

2019-05-08 11:30:05 5818

转载 设计模式——观察者(发布/订阅模式)

观察者模式:又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个被观察者对象。这个被观察者对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。优点:解除耦合,让耦合的双方都依赖于抽象,从而使得各自的变换都不会影响另一边的变换。缺点:在应用观察者模式时需要考虑一下开发效率和运行效率的问题...

2019-04-29 11:34:03 342

转载 设计模式——策略

策略:定义一系列的策略(算法),把每一个策略封装起来, 并且使它们可相互替换。策略模式模式使得策略可独立于使用它的客户而独立变化。优点:简化代码,避免太多if…else…导致的代码臃肿,便于维护策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。缺点:客户端必须知道所有的策略类,并自行决定使用...

2019-04-29 10:46:57 197

原创 ANR出现原因

1.耗时的网络访问2.大量的数据读写3.数据库操作4.硬件操作(比如camera)5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候6.service binder的数量达到上限7.system server中发生WatchDog ANR8.service忙导致超时无响应9.其他线程持有锁,导致主线程等待超时10.其它线程终止或崩溃导...

2019-04-17 17:34:28 611

Linux锐捷客户端

锐捷客户端Linux版本

2016-05-11

空空如也

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

TA关注的人

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