Android L Settings 简要分析

L Settings 模块首界面初始化流程

L Settings模块首界面为Settings,继承自SettingsActivity,SettingsActivity继承自Activity。

首先看一下Settings.java代码可以发现它没有重写任何SettingsActiviy的方法,也没有增加任何自己的方法,唯独增加了许多静态内部类,如: /*

* Settings subclasses for launching independently. */

public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }

public static class WirelessSettingsActivity extends SettingsActivity { /* empty */ }

public static class SimSettingsActivity extends SettingsActivity { /* empty */ }

public static class TetherSettingsActivity extends SettingsActivity { /* empty */ }

public static class VpnSettingsActivity extends SettingsActivity { /* empty */ }

public static class DateTimeSettingsActivity extends SettingsActivity { /* empty */ }

public static class StorageSettingsActivity extends SettingsActivity { /* empty */ }

public static class WifiSettingsActivity extends SettingsActivity { /* empty */ } . . .

看注释可以知道,这些子类是为了启动特定独立的Settings选项而创建的,例如在某个应用里需要设置无线那么只需要启动 WirelessSettingsActivity 就可以了。

所以Settings模块的启动流程直接看SettingsActiviy就行了。

3.1 SettingsActivity.onCreate方法

onCreate方法是Activity的生命周期第一步,看看 SettingsActivity在这里都做了些什么?

// Should happen before any call to getIntent() getMetaData();

这个方法用来获得Activity的额外数据mFragmentClass,如果可以获得这个数据,那么下面会去显示mFragmentClass对应的Activity。直接启动Settings模块不会获得这个数据。(如果Settings模块有后台运行,mFragmentClass会记录最后打开的Settings中的那个ActivityClassName,从其他activity跳转过来后会,会直接运行记录的这个Activity) mIsShowingDashboard(Settings所有选项) = className.equals(Settings.class.getName());

这一步很重要,因为我们是从Settings这个Activity过来的,所以这里的 mIsShowingDashboard 为 true 。

// This is a \ // - this is a real SubSettings

// - or :settings:show_fragment_as_subsetting is passed to the Intent final boolean isSubSettings =

className.equals(SubSettings.class.getName()) ||

intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);

这个判断很重要但很明显这时isSubSettings的值是fasle,暂时忽略。

setContentView(mIsShowingDashboard ? R.layout.settings_main_dashboard : R.layout.settings_main_prefs);

前面知道这里的 mIsShowingDashboard为true,所以这里使用的布局文件为R.layout.settings_main_dashboard。settings_main_dashboard.xml文件如下:

xmlns:android=\ android:id=\ android:layout_height=\ android:layout_width=\

android:background=\ />

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4