在这种情况下,用户可以清除共享首选项但不能清除数据库

In which case user can clear shared preferences but not DB

据我所知,当用户执行 "clear data" 或 "disable" 任何应用程序时,它的共享首选项会被清除,数据库也会被清除。

所以我的问题是,

在任何情况下,用户可以执行清除共享首选项但数据库保持不变的情况吗?

清除数据意味着用户想要清除与应用相关的完整数据(sharedpref、缓存、数据库)。如果您希望某些数据在用户点击 "clear data" 后仍保持完整,请保留在设备存储中。

您不能在共享首选项中保存对象的 ArrayList。

来自 Android 文档:https://developer.android.com/guide/topics/data/data-storage.html#pref

The SharedPreferences class provides a general framework that allows you to save and retrieve persistent key-value pairs of primitive data types. You can use SharedPreferences to save any primitive data: booleans, floats, ints, longs, and strings. This data will persist across user sessions (even if your application is killed).

最简单的解决方案是在您的对象中实现可序列化并将它们保存在内部存储中。

https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

有一个选项可以将数据库放入 apk directly。当然,如果您在您的案例中使用已经完成的数据库

清除数据 将清除所有内容,共享首选项、缓存、数据库。

如果您真的只想清除共享首选项 (some/all),您可以通过迭代共享首选项以编程方式完成,如下所示:

Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.i("debug", entry.getKey() + ": " +  entry.getValue().toString());
    //put delete/edit logic here for some shared preference
} 

可以根据您的应用版本或其他逻辑(例如用户注销)放置此逻辑,但此操作只会在您的应用中执行。

我认为 Android 应用程序设置不允许您只能清除共享首选项而不清除本地数据库的任何选项。