<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[寧靜致遠]]></title><description><![CDATA[Android Framework]]></description><link>https://blog.csdn.net/xuning2516</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; xuning2516]]></copyright><item><title><![CDATA[SYSTEM_UI_FLAG_IMMERSIVE和SYSTEM_UI_FLAG_IMMERSIVE_STICKY实现沉浸式功能的源码解析]]></title><link>https://blog.csdn.net/xuning2516/article/details/89499096</link><guid>https://blog.csdn.net/xuning2516/article/details/89499096</guid><author>xuning2516</author><pubDate>Wed, 24 Apr 2019 17:33:28 +0800</pubDate><description><![CDATA[rk3288 Android N 参考深入理解Android 卷三
这里解决的是SYSTEM_UI_FLAG_IMMERSIVE和SYSTEM_UI_FLAG_IMMERSIVE_STICKY设置之后不会通过触摸屏幕调出导航栏，这种情况只要触摸屏幕就会调出导航栏
SYSTEM_UI_FLAG_IMMERSIVE和SYSTEM_UI_FLAG_IMMERSIVE_STICKY区别在于
SYSTEM...]]></description><category></category></item><item><title><![CDATA[android init进程知识整理]]></title><link>https://blog.csdn.net/xuning2516/article/details/89362388</link><guid>https://blog.csdn.net/xuning2516/article/details/89362388</guid><author>xuning2516</author><pubDate>Wed, 17 Apr 2019 19:06:06 +0800</pubDate><description><![CDATA[init主要完成几个方面功能
init作为1号进程，作为用户进程的始祖，完成从kernel space到user space切换，对android来讲完成以下几个功能：
子进程死亡处理、uevent、watchdog功能、属性存取、init.rc文件解析处理。]]></description><category></category></item><item><title><![CDATA[android源码文章整理]]></title><link>https://blog.csdn.net/xuning2516/article/details/89087759</link><guid>https://blog.csdn.net/xuning2516/article/details/89087759</guid><author>xuning2516</author><pubDate>Mon, 08 Apr 2019 14:09:01 +0800</pubDate><description><![CDATA[研究学习android源码这里分为两条线

进程线：包括android系统启动过程 kernel - init - zygoteinit - systemserver - 核心服务（ams、pms、wms等）- launcher

https://www.processon.com/mindmap/5ca74b89e4b071e8c5463140

基础设施线：包括binder 、handler消...]]></description><category></category></item><item><title><![CDATA[修改Android关机电量和关机温度]]></title><link>https://blog.csdn.net/xuning2516/article/details/84178132</link><guid>https://blog.csdn.net/xuning2516/article/details/84178132</guid><author>xuning2516</author><pubDate>Sat, 17 Nov 2018 12:04:14 +0800</pubDate><description><![CDATA[http://blog.chinaunix.net/uid-26926660-id-3329353.html

Android系统默认是电量为0关机的，如果要修改成还有5%电量就关机怎么办？（吐槽一下：其实修改成5%关机也没什么意义，因为即便还有电量，开机后系统也会再次被关闭），不过确实有这样的需求，废话少说，这里简单分析怎么改：

 

2.分析

 

电池这一块自然少不了Android Ba...]]></description><category></category></item><item><title><![CDATA[ShellCommand执行流程]]></title><link>https://blog.csdn.net/xuning2516/article/details/84174096</link><guid>https://blog.csdn.net/xuning2516/article/details/84174096</guid><author>xuning2516</author><pubDate>Sat, 17 Nov 2018 11:03:55 +0800</pubDate><description><![CDATA[为了方便调试系统服务，系统提供了shellcommand调试框架，我们使用的am、pm等都有使用这种功能，其他系统服务比如shortcutservice则是使用cmd命令来调试，具体的架构类图和流程如下，整体流程比较简单，所以这里就不具体展开。

Cmd.cpp (frameworks\native\cmds\cmd)







Java层的系统服务只需要实现onShellCommand

用...]]></description><category></category></item><item><title><![CDATA[Zygote进程2 - 启动流程]]></title><link>https://blog.csdn.net/xuning2516/article/details/80558767</link><guid>https://blog.csdn.net/xuning2516/article/details/80558767</guid><author>xuning2516</author><pubDate>Sun, 03 Jun 2018 18:25:54 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Zygote进程1 - 概述]]></title><link>https://blog.csdn.net/xuning2516/article/details/80558718</link><guid>https://blog.csdn.net/xuning2516/article/details/80558718</guid><author>xuning2516</author><pubDate>Sun, 03 Jun 2018 18:22:46 +0800</pubDate><description><![CDATA[第一部分 why zygote1 加快应用进程创建速度，通过fork和写时复制技术copyOnwritezygote通过共享已运行的虚拟机的代码和内存信息，缩短应用程序运行所耗费的时间，并且，它会事先将应用程序要使用的Android framework要使用的类和资源加载到内存中，并组织成所用资源的链接信息。新运行的Android应用程序在使用所需资源时不必每次重新形成资源的链接信息，这会节省大量...]]></description><category></category></item><item><title><![CDATA[Activity启动过程中ActivityStack TaskRecord ActivityRecord创建或设置]]></title><link>https://blog.csdn.net/xuning2516/article/details/79942954</link><guid>https://blog.csdn.net/xuning2516/article/details/79942954</guid><author>xuning2516</author><pubDate>Sat, 14 Apr 2018 18:36:36 +0800</pubDate><description><![CDATA[Activity在启动的过程中需要获得一个ActivityRecord实体，表示Activity在ActivityManagerService中的状态，

ActivityRecord创建与Activity的启动模式有关系：

Activity有四种启动模式：

standard：standard模式启动的Activity默认会进入启动它的Activity所属的任务栈TaskRecord

这种启...]]></description><category></category></item><item><title><![CDATA[Activity启动源码剖析]]></title><link>https://blog.csdn.net/xuning2516/article/details/79942805</link><guid>https://blog.csdn.net/xuning2516/article/details/79942805</guid><author>xuning2516</author><pubDate>Sat, 14 Apr 2018 18:21:24 +0800</pubDate><description><![CDATA[这里只列出简要几个流程，有时间再来详细分析其中的源码执行。

简要流程

第一步查找intent对应的activity，拿到packagemanager中保存的activityinfo，

第二步转换成ActivityManagerService中的activityrecord

第三步找到这个activityrecord对应的taskrecord和activitystack

这个步骤基本流程和...]]></description><category></category></item><item><title><![CDATA[各种情形下activity生命周期转换]]></title><link>https://blog.csdn.net/xuning2516/article/details/79942741</link><guid>https://blog.csdn.net/xuning2516/article/details/79942741</guid><author>xuning2516</author><pubDate>Sat, 14 Apr 2018 18:12:50 +0800</pubDate><description><![CDATA[1 home键

按下 onPause - onStop

返回 onRestart - onStart - onResume

2 锁屏

锁屏 onPause - onStop

解锁 onRestart - onStart - onResume



home键和锁屏虽然生命周期相同，但是触发流程不一样，home键走的正常的home activity（launcher）切换流程，栈顶act...]]></description><category></category></item><item><title><![CDATA[android生命周期总结]]></title><link>https://blog.csdn.net/xuning2516/article/details/79942701</link><guid>https://blog.csdn.net/xuning2516/article/details/79942701</guid><author>xuning2516</author><pubDate>Sat, 14 Apr 2018 18:10:12 +0800</pubDate><description><![CDATA[关于activity生命周期转换记住一点

同时只有一个activity处于onResume状态，可能有多个activity处于onstop状态，因为在activitymanagerservice中有一个成员mResumeActivity，而且只有前一个activity执行onPause之后，下一个activity的onResume流程才会执行









1 几个生命周期的特点

on...]]></description><category></category></item><item><title><![CDATA[Activity相关点]]></title><link>https://blog.csdn.net/xuning2516/article/details/79942655</link><guid>https://blog.csdn.net/xuning2516/article/details/79942655</guid><author>xuning2516</author><pubDate>Sat, 14 Apr 2018 18:01:59 +0800</pubDate><description><![CDATA[关于android知识，看了一些源码，过久了就会忘了，还是需要及时总结，方便以后查阅。

基础知识

1 一般生命周期以及转换，以官方图为例

2 源码剖析

涉及到进程、关键类

3 源码过程中的关键点

简要流程

第一步查找intent对应的activity，拿到packagemanager中保存的activityinfo，

第二步转换成ActivityManagerService中的ac...]]></description><category></category></item><item><title><![CDATA[android重复按键与onKeyLongPress长按事件触发]]></title><link>https://blog.csdn.net/xuning2516/article/details/78822621</link><guid>https://blog.csdn.net/xuning2516/article/details/78822621</guid><author>xuning2516</author><pubDate>Sat, 16 Dec 2017 22:28:35 +0800</pubDate><description><![CDATA[参考 深入理解Android卷三 - 深入理解Android输入系统
重复按键的产生：在用户持续按下一个按键到抬起之间，应用程序能够收到多个onKeyDown时间，并且getReaptCount的返回值会不断累加，并且当且仅当第二次调用KeyEvent.isLongPress返回true。z这个工作是InputDispatcher来完成。
虽然有些按键输入设备支持按键重复按下事件的回报工作（如]]></description><category></category></item><item><title><![CDATA[Dialog ParentWindow  android.view.WindowManager$BadTokenException源码剖析]]></title><link>https://blog.csdn.net/xuning2516/article/details/78447206</link><guid>https://blog.csdn.net/xuning2516/article/details/78447206</guid><author>xuning2516</author><pubDate>Sun, 05 Nov 2017 00:12:00 +0800</pubDate><description><![CDATA[08-07 21:26:43.506: ERROR/AndroidRuntime(9390): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application  
产生问题原因解析：使用getApplicationContext()里面的是不包含t]]></description><category></category></item><item><title><![CDATA[android OpenGL es图书和学习资料]]></title><link>https://blog.csdn.net/xuning2516/article/details/77997280</link><guid>https://blog.csdn.net/xuning2516/article/details/77997280</guid><author>xuning2516</author><pubDate>Sat, 16 Sep 2017 00:17:16 +0800</pubDate><description><![CDATA[官网 https://www.khronos.org/opengles/


android API指南 OpenGL ES 

https://developer.android.com/guide/topics/graphics/opengl.html
官网
android 
培训Displaying Graphics with OpenGL ES   
https://de]]></description><category></category></item><item><title><![CDATA[Telephony-Uicc双卡管理]]></title><link>https://blog.csdn.net/xuning2516/article/details/70952618</link><guid>https://blog.csdn.net/xuning2516/article/details/70952618</guid><author>xuning2516</author><pubDate>Sat, 29 Apr 2017 15:35:53 +0800</pubDate><description><![CDATA[这个部分原稿来自于Android6.0的phone应用源码分析（9）——UICC卡管理  
主要讲述双卡中卡信息保存和加载，包括UiccController，UiccCard、SimRecords等双卡相关的信息。]]></description><category></category></item><item><title><![CDATA[ContentService注册和更新机制]]></title><link>https://blog.csdn.net/xuning2516/article/details/70537126</link><guid>https://blog.csdn.net/xuning2516/article/details/70537126</guid><author>xuning2516</author><pubDate>Sun, 23 Apr 2017 18:15:22 +0800</pubDate><description><![CDATA[ContentService完成数据内容注册和更新的机制。在N平台上SystemServer通过SystemServiceManager.startService的方式拉起ContentService，并且注册到ServiceManager中。 
 
从图中可以看出ContentService完成注册和更新机制的原理：当客户端注册的时候会将ContentObserver注册到ContentServi]]></description><category></category></item><item><title><![CDATA[sim卡联系人框架]]></title><link>https://blog.csdn.net/xuning2516/article/details/52141330</link><guid>https://blog.csdn.net/xuning2516/article/details/52141330</guid><author>xuning2516</author><pubDate>Sun, 07 Aug 2016 10:03:37 +0800</pubDate><description><![CDATA[sim卡联系人是框架提供的一个基本功能，提供读取卡里面的联系人，卡联系人可以分为2g卡和3g卡，3g卡和2g卡的主要区别：3g卡的容量更大，一般可以存储500个联系人，2g卡一般存储250个联系人；3g卡可以存储emails和anrs字段。因此本章将2g卡和3g卡联系人的加载更新操作分别进行讲解。

分为卡联系人的加载，更新和删除流程，具体在加载的过程中需要区分2g卡和3g卡。现在2g卡比较少见...]]></description><category></category></item><item><title><![CDATA[CatService框架]]></title><link>https://blog.csdn.net/xuning2516/article/details/52092138</link><guid>https://blog.csdn.net/xuning2516/article/details/52092138</guid><author>xuning2516</author><pubDate>Tue, 02 Aug 2016 10:54:25 +0800</pubDate><description><![CDATA[这块代码分为三层，framework - service - activity，整体写的比较乱，细节处理可能会有问题，可能用的人比较少，所以比较少关注。
CatService监听的其实没有用处的代码
    mUiccApplication.registerForReady(this, MSG_ID_SIM_READY, null);
  
    mIccRecords.register]]></description><category></category></item><item><title><![CDATA[SubscriptionInfoUpdater.updateCarrierServices解析]]></title><link>https://blog.csdn.net/xuning2516/article/details/52091679</link><guid>https://blog.csdn.net/xuning2516/article/details/52091679</guid><author>xuning2516</author><pubDate>Tue, 02 Aug 2016 10:06:19 +0800</pubDate><description><![CDATA[SubscriptionInfoUpdater.updateCarrierServices在卡状态变化之后都会调用。主要是触发系统中运营商相关的配置信息。


private void updateCarrierServices(int slotId, String simState){
        CarrierConfigManager configManager = (Carrie]]></description><category></category></item></channel></rss>