Monkey跑出如下异常。导致Settings Crash
E AndroidRuntime: at android.app.Fragment.getResources(Fragment.java:814)
E AndroidRuntime: at android.app.Fragment.getText(Fragment.java:826)
E AndroidRuntime: at com.android.settings.wifi.WifiSettings.setOffMessage(WifiSettings.java:767)
E AndroidRuntime: at com.android.settings.wifi.WifiSettings.onWifiStateChanged(WifiSettings.java:825)
E AndroidRuntime: at com.android.settingslib.wifi.WifiTracker$MainHandler.handleMessage(WifiTracker.java:581)
这个异常是这里抛出来的:
frameworks/base/core/java/android/app/Fragment.java
809 /**
810 * Return <code>getActivity().getResources()</code>.
811 */
812 final public Resources getResources() {
813 if (mHost == null) {
814 throw new IllegalStateException("Fragment " + this + " not attached to Activity");
815 }
816 return mHost.getContext().getResources();
817 }
818
那么就说明mHost为null。mHost为什么是Null呢,什么情况下不是Null呢?
432 // Activity this fragment is attached to.
433 FragmentHostCallback mHost;
这里的说明意思是Fragment需要Attach的Activity,如果mHost为空,那么就是Fragment还没attach到Activity呗。
避免如下问题可以通过先判断mHost是否,当然系统已经给你写好了,你直接调用就ok了。
894 /**
895 * Return true if the fragment is currently added to its activity.
896 */
897 final public boolean isAdded() {
898 return mHost != null && mAdded;
899 }