开发过程中遇到的疑难杂症 持续更新中....
问题1:SP获取getStringSet getAll的对象不可以直接操作修改
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$KeyIterator.next(HashMap.java:814)
at com.android.internal.util.XmlUtils.writeSetXml(XmlUtils.java:350)
at com.android.internal.util.XmlUtils.writeValueXml(XmlUtils.java:688)
at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:295)
at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:264)
at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:230)
at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:187)
at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:597)
at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:51)
at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:512)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
注: We had seen this exception when using the SharedPreferences getStringSet method. This method returns a set that should not be modified. Modifying this set while the SharedPreferences object is being serialized to flash will produce a ConcurrentModificationException.
This will also happen if you use getAll and modify the returned map.
问题2:Activity 在onResume 崩溃
java.lang.RuntimeException:
at android.app.ActivityThread.performResumeActivity (ActivityThread.java:3623)
at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3663)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2904)
at android.app.ActivityThread.-wrap11 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1624)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6549)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:451)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:888)
Caused by: java.lang.IllegalArgumentException:
at android.os.Parcel.readException (Parcel.java:2017)
at android.os.Parcel.readException (Parcel.java:1959)
at android.app.IActivityManager$Stub$Proxy.isTopOfTask (IActivityManager.java:8510)
at android.app.Activity.isTopOfTask (Activity.java:6336)
at android.app.Activity.onResume (Activity.java:1329)
at androidx.fragment.app.FragmentActivity.onResume (FragmentActivity.java:455)
出现崩溃设备 7.0 、8.0、 8.1
修复方法:
onResume 增加防护
@Override
protected void onResume() {
try {
super.onResume();
} catch (Exception e) {
resumeCallActivity();
e.printStackTrace();
}
}
private void resumeCallActivity() {
try {
Class spClass = Activity.class;
Field callField = spClass.getDeclaredField("mCalled");
callField.setAccessible(true);
callField.setBoolean(CustomerSearchActivity.this, true);
} catch (Exception e) {
e.printStackTrace();
}
}
问题3: EditText requestFocus() 报错
at com.android.internal.util.SyncResultReceiver.waitResult(SyncResultReceiver.java:60)
at com.android.internal.util.SyncResultReceiver.getIntResult(SyncResultReceiver.java:68)
at android.view.autofill.AutofillManager.ensureServiceClientAddedIfNeededLocked(AutofillManager.java:1847)
at android.view.autofill.AutofillManager.notifyViewEnteredLocked(AutofillManager.java:966)
at android.view.autofill.AutofillManager.notifyViewEntered(AutofillManager.java:950)
at android.view.autofill.AutofillManager.notifyViewEntered(AutofillManager.java:901)
...
崩溃机型:android 10
崩溃原因:自动填充问题
修复方法:屏蔽自动填充
android:importantForAutofill="no"
问题4:反向语言国家 布局反向
android:layoutDirection="locale"
网友评论