Android 系统 Settings 启动流程详解

Settings简介

  Settings 是 Android 系统自带的一个很重要的应用,给用户提供了操作 Android 系统功能的界面。它里面包含了 Wireless & network,device,personal 以及 system 等几大块的功能设置。在 Android 源码中,该应用位于 packages/apps/Settings 下。该应用的源码是相当复杂的,设计思想很是先进,很难完全讲清楚,笔者也是读了好几遍源码再综合了几篇博客才勉强懂了Settings其启动流程的大体思路。通过博客记录下来以加深理解和印象,同时分享给大家。
  

Settings 启动流程详解

1.直接跳转子界面

  首先找到 Settings 目录,其目录结构如下,文件太多,无法完展开。
  这里写图片描述
  
这里通过每个文件夹的命名可以大概知道,每个包的大体作用是什么。由于本文主要讲解启动流程,所以先不管这些。我们先找到 Settings 的启动类,通常我们可以从清单文件中得知该应用的启动类,如下图:
这里写图片描述

从图中可以清楚的看到,Settings 的启动类为 Settings。从 Settings 源码中我们找到了Settings.java文件。但是,打开这个文件后,会感到了一脸懵逼。如下图:
这里写图片描述

该类中都是些空实现的静态内部类,没有任何与界面加载相关的内容。这是为什么呢?看上面有句英文注释就明白了,意思是这些子类是为了启动特定独立的 Settings 选项而创建的,例如在某个应用里需要设置无线那么只需要启动无线对应的类就可以了,而没必要打开settings应用再点击wifi设置项进行设置。再看此类继承于 SettinggsActivity,这时我们就应该可以想到,初始化界面应该在它父类 SettinggsActivity 里完成的。为了方便讲解,我们先以wifi设置页面WifiSettingsActivity 的直接跳转为例,详细讲解这个启动流程。懂了这个之后,其他子页面的启动自然就明白了。

接下来我们在清单文件中找到 WifiSettingsActivity 的定义如下:
  这里写图片描述
  
其中有 meta-data 的标签使用,从这个标签的 key-value 来看,很明显可以认为WifiSettings的具体实现应该是由 WifiSettings 这个 Fragment 来布局渲染的。然后我们回到 SettingsActivity 中,找到 onCreate() 方法如下:
这里写图片描述

可以看到,一进入 oncreate 里有个 getMetaData(), 这和我们之前看到的清单文件里的meta似乎有某种联系,点进去看,代码如下:
这里写图片描述

可以看到,这个函数的主要作用就是从 Activity 标签中获取 meta-data 标签中key为 com.android.settings.FRAGMENT_CLASS 的值,并将其赋值给 mFragmentClass 这个私有变量。
以 WifiSettingsActivity为 例,从这个 Activity 中 meta-data 标签中获取的信息为 com.android.settings.wifi.WifiSettings,即mFragmentClass=”com.android.settings.wifi.WifiSettings”。

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值