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 }
本文解析了Monkey测试中SettingsCrash异常的具体原因,详细分析了Fragment在未正确attach到Activity时调用getResources引发的IllegalStateException异常,并提供了检查Fragment是否已附加的有效方法。
1万+

被折叠的 条评论
为什么被折叠?



