android setting.java,Android Setting 启动流程总结
总结:
首先,找到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 启动流程总结相关推荐
- android源码学习- APP启动流程(android12源码)
前言: 百度一搜能找到很多讲APP启动流程的,但是往往要么就是太老旧(还是基于android6去分析的),要么就是不全(往往只讲了整个流程的一小部分).所以我结合网上现有的文章,以及源码的阅读和调试, ...
- Android 11.0 ActivityManagerService的启动流程
首先推荐一篇文章,ActivityManagerService-AMS启动流程-[Android取经之路].这篇文章是以Android 10.0源码为基础分析的,写的很详细也很棒,我学习AMS的启动就 ...
- Android系统开机到Launcher启动流程分析
本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...
- 深入分析Android 9.0源代码——Activity启动流程
引言 点击此处查看<深入分析Android 9.0源代码>系列的组织结构和相关说明. 1 应用进程发起启动请求 本章的调用流程如下图所示: (Context) Activity Instr ...
- 深入分析Android 9.0源代码——Service启动流程(startService方式)
引言 点击此处查看<深入分析Android 9.0源代码>系列的组织结构和相关说明. 1 应用进程发起启动请求 本章的调用流程如下图所示: (Context)ContextWrapperC ...
- Android 深入研究之 ✨ Activity启动流程+Activity生命周期✨
Activity分析目录 前言 Activity生命周期 1.activity的四个状态 2.activity的生命周期 3.activity优先级 Activity启动流程 Activity的启动流 ...
- android locknow,java – Android DevicePolicyManager lockNow()
我是Android开发的新手,这就是我开门的原因.我希望应用程序作为服务运行,并监视SMS.如果收到特定的SMS消息,它将锁定电话(就像锁定期限已过期一样).有点像遥控锁. 我使用DevicePoli ...
- Java面试--SpringBoot启动流程
一.SpringBoot是什么 SpringBoot 是依赖于 Spring 的,比起 Spring,除了拥有 Spring 的全部功能以外,SpringBoot 无需繁琐的 Xml 配置,这取决于它 ...
- android核心机制之Zygote启动流程
1.先说一下android中的服务,一种是系统服务,系统服务通过getSystemService方法获得,所有的系统服务运行在一个进程中. 2.还有一种是自定义Service,也就是通过startSe ...
最新文章
- 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%
- 2017 06 11 小分队二期两周总结
- mysql semi join_MySQL 通过semi join 优化子查询
- android 中如何模拟back键
- 怎么实现页面友好跳转_如何实现软,友好和一致的UI设计
- docker linux 快速开窗口_技术|如何使用 Docker 快速配置数据科学开发环境?
- 【[NOI2005]瑰丽华尔兹】
- 如何知道自己的php安装在哪,如何知道安装了哪些PHP扩展
- Freenas使用小结(一)安装
- 深度学习框架间互操作的工具:MMdnn
- 游戏服务器架构通识 BigWorlds丨skynet
- ASP.NET公司企业网站源码
- 二叉树的python实现
- maya调磨砂教程_怎么用maya调磨砂玻璃的材质?
- 创建型模式大全(Java讲解)
- 我用 140 行代码,带你看一场流星雨⭐
- 为什么要选择双线虚拟主机?
- 调用个人微信的API接口实现微信收发消息
- java的HMACSHA1加密算法
- 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一