android setting.java,Android Setting 启动流程总结
总结:首先,找到Settings目录,打开AndroidManifest文件,确定Setting启动时调用的类Settings.java。Settings继承于SettingsActivity,内部定义了其他的子类,也继承于SettingsActivity,从注释可以知道,这种定义方式使得内部子类可以独立的调用跳转到对应界面。/** Settings subclasses for launchin
总结:
首先,找到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来确定的。
更多推荐
所有评论(0)