Settings模块-界面加载

864 阅读2分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

Settings界面加载

(Settings部分源码在packages/Settings下)

Android系统源码中,Settings模块的功能多达二三十个,包括wifi、蓝牙、nfc、屏幕设置等等重要功能模块。

从Androidmanifest.xml看起,发现程序入口是Settings类,其继承自SettingsActivity,且没有重写任何生命周期函数,只是定义一些空实现的内部类外,作用是当创建快捷方式时启动独立的类。 Setings模块的主界面的Activity为 Settings Setings模块的子界面的Activity为 SubSettings

SettingsActivity:

1.mIsShowingDashboard获取当前类名,通过类名来判断加载布局,判断当前是Settings还是SubSettings来确定用什么布局来显示。

2.在进行界面跳转时, 使用launchSettingFragment(initialFragmentName, isSubSettings, intent)函数中又做出了区分:

(1)首先调用getMetaData()方法,该方法在加载对应的设置项时会从Androidmanifest中声明的Activity的节点下获取到fragmentclass的值。作用是是从Activity标签中获取meta-data标签中key为com.android.settings.FRAGMENT_CLASS的值。

(2)调用getIntent方法:作用是返回intent.

getIntent方法中看到通过getStartingFragmentClass(superIntent)方法创建了startingFragment对象来给Intent赋值,进入getStartingFragmentClass方法:

图片4.png

在获取到startingFragment之后,构建一个intent并为其增加一个特殊的键值对

key:settings:show_fragment(EXTRA_SHOW_FRAGMENT),

value:mfragmentClass指定的类名

(3)final String initialFragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT);

(4)传入到launchSettingFragment(initialFragmentName, isSubSettings, intent)中,第一次进入到主界面时mIsShowingDashboard是等于true的,会加载一级界面,主界面使用DashboardSummary(Fragment)进行填充。

当点击进入子界面时,子界面则使用各自的Fragment,并设置各自的主题。

图片5.png

Settings模块的数据加载分为一级菜单数据加载和二级菜单数据加载,欲了解详情,可看下一篇文章。