自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

宇落 生命不息,奋斗不止......

个人简书地址:https://www.jianshu.com/u/913314e5d781

  • 博客(27)
  • 收藏
  • 关注

原创 Android Framework入门介绍

framework概述Android简介      Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同...

2018-03-13 09:37:56 87209

原创 Android7.0多窗口实现原理(二)

    从上文可以知道当开始分屏时从SystemUI调用到ActivityStackSupervisor中的startActivityFromRecentsInner函数,当要分屏的Activity已经存在了,属于热启动分屏。在anyTaskForIdLocked函数中就直接将对应的TaskRecord对象返回。Move Stack    由于获取到的TaskRecord并不是...

2018-08-30 19:58:43 3592

原创 Android7.0多窗口实现原理(一)

概述在Android N(7.0)版本开始,系统支持了多窗口功能。在有了多窗口支持之后,用户可以同时打开和看到多个应用的界面。并且系统还支持在多个应用之间进行拖拽。在大屏幕设备上,这一功能非常实用。在Android N中多窗口有三种表现形式:分屏模式该模式主要将屏幕一分为二,同时出现两个应用界面。    2.画中画模式该模式主要在视频播放中使用,可以使视频播放窗口一直处于...

2018-07-24 20:57:05 10893 1

原创 Android7.1 ActivityManagerService概述

简介        ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。AMS主要的职责就是对Android四大组件(Activity,Service,ContentProvider,Broadcast)进行管理。虽然开发者在开发过程中...

2018-03-29 20:47:44 3765

原创 Framework常用工具及LOG调试方法

概述      Framework开发是一项非常繁琐复杂的工作,需要阅读大量的源代码,分析及其多的LOG信息来定位错误位置。这个时候如果使用一些工具或者知道如何定位重要LOG信息,就可以使一些复杂的工作变的简单很多,使我们分析问题的效率变得更快,不再为阅读大量的源代码而感到一筹莫展。本文将针对一些场景讲解如何分析系统LOG信息,如何添加LOG定位错误信息,以及常用工具以及使用方法。常用工具Hier...

2018-03-19 21:11:18 10058 2

原创 Linux常用命令

工作中常用的Linux命令:关机和注销命令:reboot重启系统,需加sudo执行命令:shutdown [选项] [时间] [警告信息]关闭/重启系统,各选项含义如下- k 并不真正关机而只是发出警告信- r 关机后立即重新启动 - h 关机后不重新启动 - f 快速关机重启动时跳过 fsck - n 快速关机不经过 init程序 - c 取消一个已经运行的 shutdown例子:(需加sudo...

2018-03-13 21:20:03 1359

原创 Android7.1 Presentation双屏异显原理分析

绪论       随着用户的需求增多,特别是对于一些Android平板电脑以及其他的一些Android智能设备可能有多个屏幕,用户不仅想要在主屏幕上显示内容,同样在第二屏幕上也要显示想要的内容,这样可以达到更好的体验效果。Google也是不负众望在Android4.2版本以后提供了Presentation类,可以轻松实现在两块屏幕上同时显示不同的内容。      Presentation是一个特殊...

2018-03-06 19:41:08 28066 5

原创 Android7.1 Kyguard界面灭屏时间分析

概述      在Android系统中,当用户没有操作手机一段时间后,系统会自动灭屏进入休眠状态,从而降低手机功耗。一般情况下系统灭屏的时间由用户在手机设置中自己进行定义是10s,30s还是1min等等。但是如果现在系统当前显示的是锁屏界面,不论用户在设置中定义的屏幕超时时间是多少,此时超时时间默认都是10s。而为何在锁屏界面屏幕超时时间都是10s,又是如何设置的呢?就是本文需要分析的问题。系统灭...

2018-03-02 10:37:13 3474 1

原创 Android7.0 DirectBoot阻塞开机分析

DirectBoot功能介绍当手机已经通电开机但是用户并有解锁锁屏的时候,Android N运行于一个安全的模式,也就是Dierect Boot模式。为了支持Dierect Boot模式,系统提供了两个存储数据的地方:1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。2.Device encrypted storage,主要对

2017-03-23 16:03:52 28586 16

原创 Android7.0 AsyncTask机制

在Android中常采用的异步处理机制有Handler和AsyncTask,本文所要介绍的是AsyncTask异步处理机制。  对于每个Android应用程序都运行在一个dalvik虚拟机进程中,应用进程开始的时候会启动一个主线程(MainThread),主线程负责处理和ui相关的事件,因此主线程通常又叫UI线程。而由于Android采用UI单线程模型,所以只能在主线程中对UI元素进行操作。并

2017-03-22 19:48:52 1881 1

原创 Android7.0 Watchdog机制

对手机系统而言,因为肩负着接听电话和接收短信的“重任”,所以被寄予7x24小 时正常工作的希望。但是作为一个在嵌入式设备上运行的操作系统,Android运行中必须面对各种软硬件干扰,从最简单的代码出现死锁或者被阻塞,到内存越界导致的内存破坏,或者由于硬件问题导致的内存反转,甚至是极端工作环境下出现的CPU电子迁移和存储器消磁。这一切问题都可能导致系统服务发生难以预料的崩溃和死机。    想解决

2017-03-21 20:44:42 9685 2

原创 Android7.0 Handler消息机制

概述    线程间共享数据一般采用:全局变量方式、消息传递方式、参数传递方式等。    而在Android系统中采用最多的则是消息传递方式,也就是我们说的Android消息机制。Android消息机制设计的本意就是实现线程间通信。    对于每个Android应用程序都运行在一个dalvik虚拟机进程中,应用进程开始的时候会启动一个主线程(MainThread),主线程负责处理和UI相关的事件...

2017-03-21 16:50:41 1050

原创 Android7.0 启动Launcher流程

在前文分析启动SystemServer流程可以知道在ZygoteInit中通过反射机制执行SystemServer的main函数,从而进入到SystemServer中。在SystemServer的main函数中所做的事情很简单,就是创建SystemServer对象并调用它的run函数进一步处理。    如果设备的时间为1970年之前的话,就会将手机时间设置为1970年。为SystemS

2017-03-21 16:06:12 7207 2

原创 Android7.0关机流程分析

在长按power键时系统会弹出对话框,让用户选择关机, 重启或者其他模式. 在本文中重点讲解系统关机流程. 让大家了解在系统关机过程都做了哪些事情,而导致关机慢又有那些主要的原因.在Android7.0 PowerManagerService亮灭屏(一)一文中有对按power键传输讲解, 长按power键是在java层的PhoneWindowManager.java中进行处理的. p

2017-01-17 19:36:23 9007 8

原创 Android7.0 PowerManagerService亮灭屏分析(三)

在前面两部分已经对绘制windows与设置设备状态进行了详细讲解. 之后接着就该对亮度值进行设置, 实现亮屏动作了.在DisplayPowerController中的animateScreenBrightness函数通过亮度渐变动画来将亮度设置到目标亮度. // Brightness animation ramp rate in brightness units per second. ...

2017-01-14 17:06:06 5858 4

原创 Android7.0 PowerManagerService亮灭屏分析(二)

    在PowerManagerService中对各种状态进行判断后,将其数值封装进DisplayPowerRequest中传入DisplayPowerController中进一步处理。在亮屏过程中DisplayPowerController会根据传过来的数值来设置新的电源状态为亮屏,然后调用DisplayPowerState来对状态进行设置,在分析DisplayPowerState时会具体讲解...

2017-01-13 20:32:05 9771 1

原创 Android7.0 PowerManagerService亮灭屏分析(一)

绪论可以导致手机亮灭屏的因素有多种,而在本文中主要讲解按power键亮灭屏过程以及来电亮屏。在亮灭屏过程power中主要的实现类与功能如下所述:PowerManagerService.java:以下简称PMS或者PowerMS,主要处理系统中与power相关的计算,然后决策系统该如何反应。同时协调power如何与系统其他模块的交互,比如没有用户活动时屏幕变暗等。DisplayPowerContro...

2017-01-13 14:11:08 19559 3

原创 Android7.0启动SystemServer进程

在分析Android系统进入zygote进程一文中知道SystemServer是系统中非常核心的进程 SystemServer在ZygoteInit中进行创建,并且启动起来的.代码位置frameworks/base/core/java/com/android/internal/os/ZygoteInit.java if (startSystemServer) { //根...

2017-01-11 19:40:14 4460

原创 Android7.0系统进入Zygote进程

    SystemServer进程Android用户空间核心的的进程, framework层的很多services都是在SystemServer中进行创建并启动的. SystemServer也是由Zygote进行孵化的. 在将解启动zygote进程一文中知道启动zygote就会进入framework/cmds/app_process/app_main.cpp的main函数中在init.rc中zy...

2017-01-05 19:32:45 5930

原创 Android7.0 bootchart工具使用说明

Bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。Android5.1之前已自带bootchart,但缺省时不被编译,需要显式指定编译。5.1之后的不用编译boot.img.安装Bootchart首先,在pc机上安装bootchart工具,命令如下:sudo a

2016-12-29 15:42:05 10171 10

原创 Android7.0调试Init进程(开机过程如何确认init耗时点)

有时候分析log时会发现在init进程中耗时较长, 大约过了8s才启动zygote进程, 由于init.rc中的命令都必须按照顺序来执行, 并且是一个一个执行串行了. 这就会发生一个命令执行时间太长阻塞下一个命令执行。这时就需要将init进程执行命令花费时间的log打开, 来具体定位到底执行哪个命令耗时比较长.7.0具体代码位置在:system/core/init/action.cppvoid

2016-12-29 14:58:25 3356

原创 android7.0启动zygote进程

    zygote孵化器在android系统中有着及其中要的位置. android系统中的进程都是有zygote孵化出来的, 所有应用进程都是zygote的子进程. 在init进程中的服务都是由命令启动起来的, zygote服务也不例外, 所以在分析zygote之前要分析一下init.rc中命令是如何执行的. 在分析init进程时知道在init.cpp中的main函数循环执行命令 whil...

2016-12-05 19:44:34 4431

原创 Android7.0解析Init.rc文件

    在解析Init.rc之前需要对init.rc文件有一个认识,init.rc是由一种被称为"Android初始化语言"(Android Init Language,这里简称为AIL)的脚本写成的文件.该语言是由语句组成的,主要包含了五种类型的语句:ActionCommandsServicesOptionsImport 在init.rc文件中一条语句通常占用一行,单词之间是用空格符来相隔的。如...

2016-11-28 19:44:44 9541 2

原创 Android7.0 klog机制(如何将android log打印到kernel log中)

在分析Android7.0 init进程一文中提到,在init进程中是通过klog来输出log信息的,但是由于log的级别不同可能导致有些添加的log无法输出来。在init .cpp的main函数中初始化klog。 klog_init(); //初始化klog klog_set_level(KLOG_NOTICE_LEVEL); //设置klog的级别为NO

2016-11-25 19:06:29 11438

原创 Android7.0探索之旅--init进程

进入用户空间在kernel中通过run_init_process来执行init进程,之后就会进入system/core/init/init.cpp的main函数,这才真正的进入用户空间。进入main函数后,会进行判断是否是系统启动的第一阶段,只有启动参数中有--second-stage才为第二阶段bool is_first_stage = (argc == 1) || (strcmp(argv[1...

2016-11-24 15:02:59 4702 3

原创 开启Android7.0探索之旅

纵观博客界有很多技术大牛对应用开发乃至整个android系统都有较深的理解, 但是往往都是基于较老的android版本进行分析, 由于google的不懈努力现在android已经到了7.0, android架构在不断改变,代码在不断优化。如果仍然学习较老版本的代码会让很多人迷惑, 同时也不能很好的学习google的最新知识。 鉴于此我要站在前人的肩膀上对Android系统中的一些技术点进行更新。

2016-11-24 11:18:09 628

原创 Android系统启动流程总览

绪论    Android是基于Linux内核的, 可扩展的智能终端设备. 越来越多的用户使用Android设备, 而移动智能时代已经悄然而至,很多人都感觉这是一个神奇的世界, 对其知之甚少. 就让我们通过本文来揭开Android设备系统启动的神秘面纱,以此来了解这个神秘的世界.Android系统总览   当电源键按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行,加载引导程序到RAM,...

2016-11-22 18:06:02 4237 2

空空如也

空空如也

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

TA关注的人

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