addPreferencesFromResource()在Android上导致StrictMode冲突

addPreferencesFromResource()在Android上导致StrictMode冲突,android,thread-safety,preferencefragment,android-strictmode,Android,Thread Safety,Preferencefragment,Android Strictmode,我有几个片段扩展了“preference-v8-28.0.0”中的PreferenceFragmentCompat类。为了扩大视图,我使用addPreferencesFromResource(..)如下所示: @Override public void onCreatePreferences(Bundle bundle, String key) { readKeys(); addPreferencesFromResource(R.xml.preference_gene

我有几个片段扩展了“preference-v8-28.0.0”中的
PreferenceFragmentCompat
类。为了扩大视图,我使用
addPreferencesFromResource(..)
如下所示:

  @Override
  public void onCreatePreferences(Bundle bundle, String key)
  {
    readKeys();
    addPreferencesFromResource(R.xml.preference_general);
    bindPreferences();
  }
  private void enabledStrictMode()
  {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());
  }
在启用StrictMode时进行检查,如下所示:

  @Override
  public void onCreatePreferences(Bundle bundle, String key)
  {
    readKeys();
    addPreferencesFromResource(R.xml.preference_general);
    bindPreferences();
  }
  private void enabledStrictMode()
  {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());
  }
我有线程模式冲突:

2020-08-26 17:44:21.877 17990-17990 D/StrictMode: StrictMode policy violation; ~duration=471 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=327743 violation=2
        at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1438)
        at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
        at java.io.File.exists(File.java:807)
        at android.app.ContextImpl.getDataDir(ContextImpl.java:2181)
        at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:504)
        at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:698)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:366)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)
        at android.support.v7.preference.PreferenceManager.getSharedPreferences(PreferenceManager.java:331)
        at android.support.v7.preference.Preference.getSharedPreferences(Preference.java:1213)
        at android.support.v7.preference.Preference.dispatchSetInitialValue(Preference.java:1561)
        at android.support.v7.preference.Preference.onAttachedToHierarchy(Preference.java:1293)
        at android.support.v7.preference.Preference.onAttachedToHierarchy(Preference.java:1305)
        at android.support.v7.preference.PreferenceGroup.addPreference(PreferenceGroup.java:260)
        at android.support.v7.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:181)
        at android.support.v7.preference.PreferenceInflater.rInflate(PreferenceInflater.java:363)
        at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:170)
        at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:120)
        at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:138)
        at android.support.v7.preference.PreferenceFragmentCompat.addPreferencesFromResource(PreferenceFragmentCompat.java:429)
        at org.company.libproject.android.settings.GeneralSettingsFragment.onCreatePreferences(GeneralSettingsFragment.java:106)
        at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:228)
        at org.company.libproject.android.settings.BaseSettingsFragment.onCreate(BaseSettingsFragment.java:90)
        at org.company.libproject.android.settings.GeneralSettingsFragment.onCreate(GeneralSettingsFragment.java:91)
        at android.support.v4.app.Fragment.performCreate(Fragment.java:2414)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
        at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1195)
        at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:1078)
        at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:117)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2408)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
        at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
        at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
        at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
        at android.app.Activity.performStart(Activity.java:6992)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.jav
有点像预期的那样,它将读取一个发生在主线程上的XML file=IO操作。 为什么会被视为违反规定?在
onCreate(…)
中,任何活动在概念上与
setContentView(…)
[不违反它]有什么区别

不违反规定的正确做法是什么?我是否应该忽略它并放松模式检查(我真的希望避免这样做)

另外,我知道“支持库”现在被弃用,取而代之的是“androidx库”,但我猜它也与之相关。无论如何,我正在寻找一个合适的解决方案,目前支持库的工作