总结:

首先,找到Settings目录,打开AndroidManifest文件,确定Setting启动时调用的类Settings.java。Settings继承于SettingsActivity,内部定义了其他的子类,也继承于SettingsActivity,从注释可以知道,这种定义方式使得内部子类可以独立的调用跳转到对应界面。

/** Settings subclasses for launching independently.*/

打开SettingsActivity.java,SettingsActivity继承于SettingsDrawerActivity,SettingDrawerActivity中主要是在初始化时添加包的安装、移除、修改、更新的监听和注册广播以及启动线程更新category。此外,SettingDrawerActivity中覆写了setContentView方法使得子类可以将view添加到R.id.content_framet容器中。

重新回到SettingsActivity的onCreate方法,留意getMetaData方法,用于获取Activity的meta-data字段,然后赋值给mFragmentClass,也就是要显示的Fragment的完整包名路径。在SettingsActivity中覆写了getIntent方法将要填转的界面赋值给EXTRA_SHOW_FRAGMENT,在setContentView时会对要显示的界面进行判断,Setting根界面和子类界面会调用不同的layout,然后分别调用switchToFragment方法加载不同的内容。

加载内容以DashboardSummary.java为例,首先看到onCreateView方法,R.layout.dashboard本身是一个recyclerview布局,除去基本的界面和recyclerview设置,直接看rebuildUI方法,里面调用了updateCategory方法。CategoryKey.CATEGORY_HOMEPAGE 实际上就是 com.android.settings.category.ia.homepage,也就是说category是从AndroidManifest文件解析

getTilesForAction(context, user, SETTINGS_ACTION, cache, null, tiles, true,

settingPkg);

getTilesForAction(context, user, OPERATOR_SETTINGS, cache,

OPERATOR_DEFAULT_CATEGORY, tiles,false, true, settingPkg);

getTilesForAction(context, user, MANUFACTURER_SETTINGS, cache,

MANUFACTURER_DEFAULT_CATEGORY, tiles,false, true, settingPkg);

}if(setup) {

getTilesForAction(context, user, EXTRA_SETTINGS_ACTION, cache,null, tiles, false,

settingPkg);if (!categoryDefinedInManifest) {

getTilesForAction(context, user, IA_SETTINGS_ACTION, cache,null, tiles, false,

settingPkg);if (extraAction != null) {

getTilesForAction(context, user, extraAction, cache,null, tiles, false,

settingPkg);

}

可以看出,要填充那些子类是从AndroidManifest文件中解析Action相对应的Activity来确定的。

android setting.java,Android Setting 启动流程总结相关推荐

  1. android源码学习- APP启动流程(android12源码)

    前言: 百度一搜能找到很多讲APP启动流程的,但是往往要么就是太老旧(还是基于android6去分析的),要么就是不全(往往只讲了整个流程的一小部分).所以我结合网上现有的文章,以及源码的阅读和调试, ...

  2. Android 11.0 ActivityManagerService的启动流程

    首先推荐一篇文章,ActivityManagerService-AMS启动流程-[Android取经之路].这篇文章是以Android 10.0源码为基础分析的,写的很详细也很棒,我学习AMS的启动就 ...

  3. Android系统开机到Launcher启动流程分析

    本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...

  4. 深入分析Android 9.0源代码——Activity启动流程

    引言 点击此处查看<深入分析Android 9.0源代码>系列的组织结构和相关说明. 1 应用进程发起启动请求 本章的调用流程如下图所示: (Context) Activity Instr ...

  5. 深入分析Android 9.0源代码——Service启动流程(startService方式)

    引言 点击此处查看<深入分析Android 9.0源代码>系列的组织结构和相关说明. 1 应用进程发起启动请求 本章的调用流程如下图所示: (Context)ContextWrapperC ...

  6. Android 深入研究之 ✨ Activity启动流程+Activity生命周期✨

    Activity分析目录 前言 Activity生命周期 1.activity的四个状态 2.activity的生命周期 3.activity优先级 Activity启动流程 Activity的启动流 ...

  7. android locknow,java – Android DevicePolicyManager lockNow()

    我是Android开发的新手,这就是我开门的原因.我希望应用程序作为服务运行,并监视SMS.如果收到特定的SMS消息,它将锁定电话(就像锁定期限已过期一样).有点像遥控锁. 我使用DevicePoli ...

  8. Java面试--SpringBoot启动流程

    一.SpringBoot是什么 SpringBoot 是依赖于 Spring 的,比起 Spring,除了拥有 Spring 的全部功能以外,SpringBoot 无需繁琐的 Xml 配置,这取决于它 ...

  9. android核心机制之Zygote启动流程

    1.先说一下android中的服务,一种是系统服务,系统服务通过getSystemService方法获得,所有的系统服务运行在一个进程中. 2.还有一种是自定义Service,也就是通过startSe ...

最新文章

  1. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%
  2. 2017 06 11 小分队二期两周总结
  3. mysql semi join_MySQL 通过semi join 优化子查询
  4. android 中如何模拟back键
  5. 怎么实现页面友好跳转_如何实现软,友好和一致的UI设计
  6. docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?
  7. 【[NOI2005]瑰丽华尔兹】
  8. 如何知道自己的php安装在哪,如何知道安装了哪些PHP扩展
  9. Freenas使用小结(一)安装
  10. 深度学习框架间互操作的工具:MMdnn
  11. 游戏服务器架构通识 BigWorlds丨skynet
  12. ASP.NET公司企业网站源码
  13. 二叉树的python实现
  14. maya调磨砂教程_怎么用maya调磨砂玻璃的材质?
  15. 创建型模式大全(Java讲解)
  16. 我用 140 行代码,带你看一场流星雨⭐
  17. 为什么要选择双线虚拟主机?
  18. 调用个人微信的API接口实现微信收发消息
  19. java的HMACSHA1加密算法
  20. 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一

热门文章

  1. C语言数组,这个输出模式感觉自己很厉害!_只愿与一人十指紧扣_新浪博客
  2. 工业相机帧率与曝光时间的关系
  3. 图像分割20年,盘点影响力最大的10篇论文
  4. 基于OpenCV实战的图像处理:色度分割
  5. 应用深度学习进行乳腺癌检测
  6. 程序员必须掌握哪些算法?
  7. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析
  8. Plan9操作系统基本概念
  9. 英文版windows乱码问题(win7/8/10)
  10. 虚拟化--YESLAB DC Vphere5 上课PDF