定位過程

一、日志
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: FATAL EXCEPTION: main
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: Process: com.android.settings, PID: 4876
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: android.content.res.Resources$NotFoundException: Resource ID #0x0
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.-wrap12(ActivityThread.java)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6121)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.Resources.loadXmlResourceParser(Resources.java:2101)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.Resources.getXml(Resources.java:1164)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:115)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:127)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v14.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:440)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsPreferenceFragment.addPreferencesFromResource(SettingsPreferenceFragment.java:144)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.createPreferenceHierarchy(SecuritySettings.java:1084)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.onCreate(SecuritySettings.java:1046)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Fragment.performCreate(Fragment.java:2336)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.setLastIn(BackStackRecord.java:860)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.calculateFragments(BackStackRecord.java:900)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.run(BackStackRecord.java:728)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:563)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsActivity.switchToFragment(SettingsActivity.java:1144)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsActivity.onCreate(SettingsActivity.java:669)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6723)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: ... 9 more
02-23 16:10:56.935? 1394? 2357 I am_crash: [4876,0,com.android.settings,952647237,android.content.res.Resources$NotFoundException,Resource ID #0x0,ResourcesImpl.java,190]
二、
追蹤日志 ,發(fā)現(xiàn)
02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.onCreate(SecuritySettings.java:1046)
這塊為空
三、查看代碼
private void createPreferenceHierarchy() {
? ? ? ? ? ? PreferenceScreen root = getPreferenceScreen();
? ? ? ? ? ? if (root != null) {
? ? ? ? ? ? ? ? root.removeAll();
? ? ? ? ? ? }
? ? ? ? ? ? root = null;
? ? ? ? ? ? final int resid = getResIdForLockUnlockSubScreen(getActivity(),
? ? ? ? ? ? ? ? ? ? new LockPatternUtils(getContext()),
? ? ? ? ? ? ? ? ? ? ManagedLockPasswordProvider.get(getContext(), MY_USER_ID));
? ? ? ? ? 1084 ? addPreferencesFromResource(resid);? 這個(gè)為空了
? ? ? ? ? ? // lock after preference
? ? ? ? ? ? mLockAfter = (TimeoutListPreference) findPreference(KEY_LOCK_AFTER_TIMEOUT);
? ? ? ? ? ? if (mLockAfter != null) {
? ? ? ? ? ? ? ? setupLockAfterPreference();
? ? ? ? ? ? ? ? updateLockAfterPreferenceSummary();
? ? ? ? ? ? }
? ? ? ? ? ? // visible pattern
? ? ? ? ? ? mVisiblePattern = (SwitchPreference) findPreference(KEY_VISIBLE_PATTERN);
四、解決方案,
一、增加int 類型的非空判斷處理
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 4876541..0ab2fb9 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -1083,6 +1083,12 @@
? ? ? ? ? ? final int resid = getResIdForLockUnlockSubScreen(getActivity(),
? ? ? ? ? ? ? ? ? ? new LockPatternUtils(getContext()),
? ? ? ? ? ? ? ? ? ? ManagedLockPasswordProvider.get(getContext(), MY_USER_ID));
+
+? ? ? ? ? ? if (resid == 0) {
+? ? ? ? ? ? ? ? finish();
+? ? ? ? ? ? ? ? return;
+? ? ? ? ? ? }
+
? ? ? ? ? ? addPreferencesFromResource(resid);
? ? ? ? ? ? // lock after preference
二、增加異常捕獲
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? addPreferencesFromResource(resid);
? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? Log.e(TAG, "getResIdForLockUnlockSubScreen resid = "+resid);
? ? ? ? ? ? }
五、問題解決。