Android系统开发
文章平均质量分 84
FightFightFight
掘金:
https://juejin.cn/user/1459757308978104
展开
-
Android 9.0 JobScheduler(四) Job约束条件的控制
上一篇文章:JobScheduler源码分析(三) Job从创建到执行在前两篇文章中,对JobSchedulerService的启动和Job的调度过程大致做了个梳理,通过前几篇的分析我们知道,要使得客户端Job被JSS调度执行,必须满足该Job在创建时所设置的约束,而这些约束何时满足,这将由StateController进行控制,本篇中将对所有StateController类的控制流程进行分析。...原创 2019-01-30 17:04:52 · 3893 阅读 · 1 评论 -
Android 8.1 Battery系列(一) BatteryService分析
概述BatteryService负责监听充电状态和电量变化,当电量值或者充电类型改变时,会获取到底层healthd上报的电池状态信息,并更新到BatteryStatsService中进行统计,同时会将这些值存储到Intent中,以广播的形式发送到监听了ACTION_BATTERY_CHANGED的组件中,其他组建可以通过Intent.getExtra()的方式获取到电池信息。1.Bat...原创 2018-09-03 19:20:38 · 4949 阅读 · 1 评论 -
Android 8.1 Battery系列(三) PowerProfile和power_profile.xml
概述在Battery系列(二)中分析道,当实例化BatteryStatsImpl完毕后,给BSI对象设置了一个PowerProfile对象,这个对象的作用是什么呢?在了解PowerProfile之前,需要了解下电源配置文件。电源配置文件定义了组件的电流消耗值以及该组件在一段时间内大概消耗的电量。 在Google给出的文档中指出:在电源配置文件中,功耗表示额定电压下的电流消耗量,单位为mA...原创 2018-09-05 18:17:45 · 4560 阅读 · 0 评论 -
[Android Framework] 8.1 Battery系列(六) 上次充满电计算
Settings中获取”上次充满电”时间的代码如下:packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryUtils.javapublic long calculateLastFullChargeTime(BatteryStatsHelper batteryStatsHelper, long cur...原创 2018-09-11 17:40:43 · 1635 阅读 · 2 评论 -
[Android Framework] 8.1 Battery系列(五) 电量预计可用多长时间计算
电量剩余使用时间值的计算和电量充满时间计算非常类似。Settings中获取时间值的接口如下:packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryInfo.javalong prediction = discharging ? stats.computeBatteryTimeRemaining(...原创 2018-09-11 16:59:46 · 2993 阅读 · 1 评论 -
[Android Framework] 8.1 Battery系列(四) 电量还需多长时间充满时间计算
概述当设备插入充电且电量发生变化一段时间后,在Settings->Battery中和锁屏界面都会有”还需多长时间充满”提示,这里来分析下这个时长是如何获得的。Settings中调用接口:packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryInfo.javaFinal long chargeTime ...原创 2018-09-07 19:09:42 · 3037 阅读 · 0 评论 -
Android 8.1 Battery系列(二) BatteryStatsService分析
概述BatteryStatsService负责电池信息的收集,以及各个部分耗电量的统计,它继承于IBatteryStats.Stub,因此可以通过Binder机制和其他组件进行交互。在上一节中分析过BatteryService,它负责监听从底层传上来的电量信息,当有数据时,BatteryService会将数据传给BatteryStatsService,BatteryStatsService中所...原创 2018-09-04 18:06:22 · 4451 阅读 · 2 评论 -
Android 8.1 Doze模式分析(三)——Deep Doze模式
概述Deep Doze,也就是Android的Doze模式了,表示深度Doze,比起LightDoze,它将进行更多的限制:无法进行网络访问和 GPS/WLAN 扫描、唤醒被忽略、闹钟和作业/同步被延迟。当然,它的触发条件也将更加苛刻:灭屏、未充电、静止。因此,如果要支持DeepDoze,则相应设备还必须具有大幅度动作检测器 (SMD),否则,无法探测到到底是静止还是移动。原理...原创 2018-08-02 20:57:57 · 4784 阅读 · 0 评论 -
Android 8.1 Doze模式分析(二)——Light Doze模式
概述LightDoze表示轻度doze模式,如果设备处于未充电且屏幕关闭状态,但未处于静止状态时,就会进入Light Doze模式,在LightDoze模式中,会定期进行维护,这种维护会持续N分钟,在维护状态(maintenance)时,会进行网络的访问,和同步、JobScheduler的操作,然后又会进入Idle状态,持续多次。之后如果设备仍旧保持静止,则会进入Deep Doze模式,因此,...原创 2018-08-02 19:36:16 · 8223 阅读 · 1 评论 -
[Linux] SEAndroid基础学习
概述SEAndroid是在Android 4.3版本中开始引入的基于SELinux的系统安全机制。关于SELinux的一些基础已经在SELinux基础中总结了。 在平时工作中,遇到SEAndroid最多的,就是一些权限问题,因此,本文的主要目标,是如何查看SELinux权限拒绝信息、如何修改添加权限。1.SEAndroid相关文件1.system/sepolicy目录该目...原创 2018-09-17 16:07:27 · 2242 阅读 · 1 评论 -
Android 8.1 Battery系列(七) BatteryStatsHelper类和耗电量统计
概述BatteryStatsHelper类用于负责计算各个应用和服务的电量使用情况,利用BatteryStatsService中统计的时长和电源配置文件中的配置值,通过计算得到耗电量信息供Application层使用。在Settings通过refreshStats()方法从BatteryStatsHelper中获取电池的数据。下面就BatteryStatsHelper从实例化到计算系统用电情况...原创 2018-09-13 20:32:49 · 5608 阅读 · 1 评论 -
编译源码时,Android can only be built by versions 3.81 and 3.82解决方法
在编译源码时,出现如下错误:build/core/main.mk:45: ********************************************************************************build/core/main.mk:46: * You are using version 4.1 of make.build/core/main.m...原创 2018-03-26 12:36:47 · 3878 阅读 · 2 评论 -
Android 9.0 JobScheduler(三) 从Job的创建到执行
上一篇文章:JobScheduler(二)——JobScheduler框架介绍及JSS的启动现在来看看Job的添加流程,当应用程序通过JobScheduler.schedule(jobinfo)添加一个Job,到它最终完成调度,这个过程是怎样的呢?现在就来看看这个过程。首先来看其时序图:受限于图片大小,以上时序图中对一些流程进行了省略,只画出了重要的步骤,不过所有的步骤,都会在下面的内容分...原创 2019-01-24 19:30:08 · 5211 阅读 · 1 评论 -
Android 9.0 JobScheduler(二) JobScheduler框架结构简述及JobSchedulerService的启动
上一篇文章:JobScheduler(一)——JobScheduler的使用1.JobScheduler框架简述在上一篇文章中,对怎样使用JobScheduler做了一个简单的总结,当客户端应用通过JobScheduler.schedule(JobInfo)方法将创建的Job发送给JobScheduler后,Framework层将完全负责它的启动、执行、完成等生命周期调度。从这篇文章开始,将对...原创 2019-01-24 19:16:27 · 4165 阅读 · 0 评论 -
Android 9.0 JobScheduler(一) JobScheduler的使用
1.JobScheduler简介JobScheduler是一个系统提供的API,旨于在应用进程、而非系统进程内执行各种作业调度,其原理是启动通过bindservice的方式启动对应应用进程的service,并在Service中进行作业。在执行一个Job时,将会使得系统持有一个WakeLock锁,以防止系统休眠进入Suspend。在创建一个作业时,会设置多个约束条件,比如可以指定特定的网络、是否...原创 2019-01-14 15:56:36 · 8666 阅读 · 0 评论 -
Android 9.0 自动背光机制分析
在android 9.0中,相比android 8.1而言,背光部分逻辑有较大的调整,这里就对android P背光机制进行完整的分析。1.手动调节亮度1.1.在SystemUI、Settings中手动调节在界面(SystemUI)和Settings中拖动进度条调节亮度时,调节入口在BrightnessController中:@Overridepublic void onChanged(...原创 2019-01-04 20:19:45 · 11638 阅读 · 6 评论 -
Android 8.1 DisplayPowerController(五) 自动调节亮度(2)——算法
在上一篇文章中,对自动背光的流程做了总结,在本篇中,将对自动背光涉及到的一些算法进行分析总结。1.采集光照强度缓冲区AmbientLightRingBuffer类是一个用于存储采集到的光照强度和对应时间点的数据接口。在自动背光控制器中,实例化了两个AmbientLightRingBuffer对象://包含所有光照样例的AmbientLightRingBuffer对象mAmbientLigh...原创 2018-11-06 14:57:51 · 5653 阅读 · 1 评论 -
Android 8.1 DisplayPowerController(四) 自动调节亮度(1)——流程
和手动调节亮度相比,自动调节亮度则稍微复杂些。其中涉及到多个算法。这里先笼统地介绍其流程,对涉及到的算法在下一篇文章中进行学习。从前面的分析得到,不管是哪种背光调节方式,其最终都会在DisplayPowerController的updatePowerState()方法中进行决策,得到最终的背光值,自动背光的亮度也不例外:private void updatePowerState() { ...原创 2018-11-04 16:16:10 · 6279 阅读 · 5 评论 -
Android 8.1 DisplayPowerController(三) 亮度调节
背光调节,即亮度调节,根据调节方式可以分为手动调节和自动调节。而手动调节有根据调节UI不同,有式有如下几种:1.在设置->显示中手动调节;2.在SystemUI中手动调节;3.在播放视频时上下滑动界面调节亮度.本篇文章对手动调节亮度流程做一个总结。1.设置-显示、SystemUI中调节亮度Settings和SystemUI中的中亮度调节进度框都是来自于SystemUI中的Br...原创 2018-10-30 20:54:56 · 4197 阅读 · 0 评论 -
[Android] 性能工具Systrace的使用
Systrace 是用于收集和检测设备在运行过程中的时序信息的一个脚本工具,它结合了来自Android内核的数据,例如CPU调度程序,磁盘活动和应用程序线程,最终会以HTML的形式报告。如何使用systraceStep1.安装systrace在android studio中,Tools -> Android -> SDK Manager -> SDK Tools,点击An...原创 2018-10-25 19:48:08 · 3113 阅读 · 0 评论 -
[Linux] SELinux基础学习
1.什么是SELinxu?SELinux(Security-Enhanced Linux),安全增强型Linux,最初是由犹他大学Flux团队和美国国防部开发的Flux高级安全内核(FLASK)开发的是由NSA开发的一种访问控制体系。NSA对该开发进行了改进,并作为开源软件发布,目前SELinux已集成到Linux2.6内核系列和几个Linux发行版中,作为Linux内核中主要的强制访问控制(...原创 2018-08-14 22:49:56 · 1106 阅读 · 0 评论 -
Android 8.1 DisplayPowerController(二) Proximity Sensor的亮灭屏
概述PSensor亮屏和按Power键亮屏流程还是有些不同之处,如开始调用位置、PowerManagerService中的流程等,由于在平常遇到过许多PSensor亮屏相关Bug,因此这里独立地进行下分析。流程在DisplayPowerController中,实例化了一个SensorEventListener对PSensor事件进行监听:private final Sensor...原创 2018-08-06 20:32:44 · 4322 阅读 · 10 评论 -
Android 8.1 PowerManagerService分析(四)——亮屏流程分析
本篇分析PMS中涉及到亮屏的部分,以及PMS相关的两个类:PowerManager和Notifier。1.亮屏流程1.1.Power键亮屏这里直接从PhoneWindowManager开始分析。按power键后,会触发PhoneWindowManager的interceptKeyBeforeQueueing()方法:@Override public int inte...原创 2018-04-03 19:37:16 · 8614 阅读 · 4 评论 -
编译源码时遇到的You are attempting to build with an unsupported JDK问题
在编译android低版本代码时,make failed了,提示如下:************************************************************You are attempting to build with an unsupported JDK.You use OpenJDK but only Sun/Oracle JDK is supp...原创 2018-03-26 13:01:26 · 6278 阅读 · 3 评论 -
Android 8.1 PowerManagerService分析(三)——WakeLock机制
在《Android 8.1 PMS分析(一)》中,主要分析了PMS的启动流程,在《Android 8.1 PowerManagerService分析(二)》中,主要分析了PMS的核心方法,本篇文章开始分析android中的WakeLock机制。WakeLock机制wakelock是android系统中一种锁的机制,只要有进程持有这个锁,系统就无法进入休眠状态。应用程序要申请wakelo...原创 2018-03-29 21:19:55 · 7905 阅读 · 4 评论 -
Android 8.1 PowerManagerService分析(一)
概述PowerManagerService是负责管理、协调设备电源管理的系统服务之一,设备常见功能如亮灭屏、亮度调节、低电量模式、保持CPU唤醒等,都会通过PMS的协调和处理。其继承自SystemService,因此具有SystemService子类的共性:具有生命周期方法,由SystemServer启动、注册到系统服务中,通过Binder和其他组件进行交互等。其生命周期方...原创 2018-03-12 21:01:57 · 9025 阅读 · 2 评论 -
Android Handler 消息机制分析(一)
Handler,Message,MessageQueue,Looper,是android一种消息处理机制,在android开发中经常会用到,当Handler创建后,会被绑定到它所在的线程上,处理消息的成员及其功能如下: Handler:发送一个消息(Message)去做特定任务 Message:代表一个要处理的任务; MessageQueu...原创 2018-03-16 19:06:26 · 495 阅读 · 3 评论 -
Ubuntu 14.04 LTS中jdk的安装
在Linux上编译Android源码时,环境的配置是必不可少的,JDK的配置过程如下,首先必须在Oracel官网上下载好jdk,下面以jdk1.8为例。第一步:用命令行进入下载好jdk的目录: 笔者在home/Downloads中:第二步:对jdk进行解压,用如下命令行,解压后会生成一个文件夹:sudo tar zxvf jdk-8u77-linux-x64.tar.gz第三步:解压出来的文件...原创 2016-04-08 23:51:09 · 662 阅读 · 0 评论 -
Android之日历源码浅析
前言:本文在整理过程中由于水平有限,若有不当之处,请指正!1 常见界面及布局的实现1.1 日历主界面: 日历主界面是由AllInOneActivity实现,对应四种视图类型动态加载相应的Fragment实现。各视图如下:(1) 日视图:在AllInOneActivity上加载了DayFragment,DayFragment的布局采用了自定义布局DayView,而填充该布局文件时用到原创 2016-09-23 20:24:46 · 9483 阅读 · 7 评论 -
SparseArray的使用
SparseArray简介SparseArray是android.util包中一个用于映射int和对象的数据结构,内部使用数组实现,分别将key和value保存在两个数组中,它避免了自动装箱操作,同时其数据结构不依赖于每个映射对象,因此比起HashMap来说更加高效。 特点:1.通过二分法查找数据。2.不适合存储大数据。3.比起HashMap,执行效率慢,查找通过二分法,添加和删除...原创 2018-04-24 16:20:01 · 5182 阅读 · 0 评论 -
AtomicFile使用
AtomicFile简介AtomicFile是Android API17中引入的对文件进行原子操作的帮助类,所谓原子性,是指在对整个文件操作时,要么不操作,要么操作成功。如果操作失败,不会影响文件内容。实现原理在获取该实例时,会在内部创建两个File对象,一个代表原文件,一个代表备份文件,通过这两个文件保证原文件的原子性,在对文件进行写操作时,步骤及其结果如下:1.开始写入...原创 2018-04-24 20:14:18 · 5948 阅读 · 0 评论 -
Android 8.1 PowerManagerService分析(二) ——updatePowerStateLocked()方法
在《Android 8.1 PowerManagerService分析(一)》中对PMS的启动流程进行了分析,本篇对PMS中的一些核心方法进行分析。1.2.updatePowerStateLocked方法详解接着上文分析,在systemReady()方法的最后,调用了updatePowerStateLocked()方法:public void systemReady(IAppO...原创 2018-05-16 19:30:14 · 7023 阅读 · 0 评论 -
Android 8.1 Doze模式分析(一)——Doze简介和DeviceIdleController的启动
概述Doze模式,官方翻译为低电耗模式,是Andoriod6.0增加的一项系统服务,主要目的是为了优化电池性能,增加电池续航时间,Doze模式又分两种模式:深度Doze模式(Deep Doze)和轻度Doze模式(Light Doze),如果用户长时间没有主动使用其设备,处于静止状态且屏幕已关闭,则系统会使设备进入Doze模式,也就是深度Doze模式。如果用户关闭设备屏幕但仍处于移动状态时,则...原创 2018-08-01 20:58:56 · 8424 阅读 · 1 评论 -
Android 8.1 DisplayPowerController(一) 亮灭屏流程
概述DisplayPowerController(以下简称DPC)用于控制显示电源状态,用来处理亮灭屏、背光的调节,包括接近传感器(P-Senser)、光线传感器(L-senser)和亮灭屏动画。它独立于PMS的其余部分,并且不共享任何状态,而是通过DisplayPowerCallbacks接口异步回调进行通信,通知PMS有关Display的改变。当PMS中请求屏幕状态时,会等待它返回一个结果...原创 2018-07-31 20:55:16 · 9047 阅读 · 1 评论 -
Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
1.Doze模式下豁免的应用和白名单列表1.什么是白名单列表?一系列应用包名的集合。2.有什么作用?处于白名单列表中的应用,不受Doze的影响,即Doze不会对该应用进行限制,如该应用的Job、Alarm、网络等不会进行限制。3如何添加应用到白名单列表?1.通过“设置”>“应用和通知”>“特殊应用权限”>“电池优化”中添加或移除;2.预值到...原创 2018-08-03 18:15:08 · 6421 阅读 · 0 评论 -
Android 8.1 Doze模式分析(四)——Doze模式的退出
概述Doze的退出,说的更严格一点,就是当Doze模式的状态由其他状态变为ACTIVE状态。简而言之,退出Doze模式有三种情况:屏幕亮屏、插入充电器、设备有移动。下面就这三种情况进行下分析。在前面的分析中我们有见到过becomeActiveLocked()方法,这个方法当时没有进行分析,这个方法就是用来退出Doze的,严格来说,是将Doze状态置为了ACTIVE状态,从而退出IDLE状态...原创 2018-08-03 17:41:14 · 4812 阅读 · 0 评论 -
Android 8.1 PowerManagerService分析(五)——灭屏流程分析
前言在之前的PMS文章分析中知道,当前系统的状态有四种:Awake状态:表示唤醒状态Dream状态:表示处于屏保状态Doze状态:表示处于Doze状态Asleep状态:表示处于休眠状态Power键灭屏当power键灭屏时,会在PWM中处理后,调用到PMS的gotoSleep()进行灭屏处理,下面直接看看PhoneWindowManger中对Power键灭屏的处理以及和PM...原创 2018-07-26 11:43:33 · 5770 阅读 · 0 评论 -
[Android Framework] Android实现充电时振动
概述在Android原生代码中,当插入USB充电时,不会有充电提示音或者振动,因此,在平时项目中,有这种需求,这里总结一下。原理当电池状态改变时,BatterService都会发出ACTION_BATTERY_CHANGED广播,在PowerManagerService中对该广播也进行了监听,PowerManagerService负责协调整个电源状态,其中有一个方法updateIs...原创 2018-07-16 20:10:20 · 2047 阅读 · 0 评论 -
[Android] adb 命令总结
调试adb devices查看已连接设备adb root已root启动adbd进程adb remount挂载设备adb kill-server杀死adb服务进程,重置adb主机调用Package Manageradb shell pm list package [options]查看设备中安装应用的包名# 列出所有应用的包...原创 2018-06-19 18:50:53 · 1414 阅读 · 0 评论 -
浅谈Android中的LOG查看ANR(一)
转自:http://yinger-fei.iteye.com/blog/1533788手机中pull处理trace.txt进去 data/anr 再pull 一:什么是ANR ANR:Application Not Responding,即应用无响应二:ANR的类型 ANR一般有三种类型转载 2016-04-07 14:40:37 · 4736 阅读 · 0 评论