Android开发中的疑难杂症

2022-01-04  本文已影响0人  全全是大王

开发过程中遇到的疑难杂症 持续更新中....

问题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"
上一篇 下一篇

猜你喜欢

热点阅读