Android ManifestsharedUserId属性现已弃用:
该常量在 API 级别 29 中已弃用。共享用户 ID 会导致包管理器内的不确定行为。因此,强烈建议不要使用它,并且可能会在 Android 的未来版本中删除它。相反,应用程序应该使用适当的通信机制(例如服务和内容提供商)来促进共享组件之间的互操作性。
我有共享用户 ID 的“免费”和“专业”应用程序版本,因为如果用户决定升级,我想轻松地将数据从免费复制到专业版。还sharedUserId阻止我使我的应用程序成为“即时应用程序” - 当尝试在本地测试时,我收到此错误:
失败[-116:即时应用程序包可能未声明sharedUserId]
所以我正在考虑从sharedUserId迁移,但我不知道如何迁移,即使我暂时把数据复制情况放在一边。如果我清除应用程序下一版本的sharedUserId,则更新后的应用程序版本将无法读取先前版本的数据,如Stackoverflow 问题中所示
这看起来像是一个死胡同。我基本上需要能够仍然访问 SQLite 数据库,但我认为它也与共享用户 ID 相关。
刚开始探索Firestore存储和要做的第一件事-通过文档密钥(已通过Google认证,请在我的Android应用中阅读一个简单的小文档),但这可能并不重要。这是一个片段:
public void readDoc(final String key) {
final long start = System.currentTimeMillis();
docsCollection.document(key).get().addOnCompleteListener(
new OnCompleteListener<DocumentSnapshot>() {
@Override public void onComplete(@NonNull Task<DocumentSnapshot> task) {
long end = System.currentTimeMillis();
Log.d("FirestoreStorage", "get() time: " + (end - start));
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是我在LogCat中看到的内容:
10-10 22:30:06.026 D/FirestoreStorage: get() time: 1666
10-10 22:30:08.199 D/FirestoreStorage: get() time: 264
Run Code Online (Sandbox Code Playgroud)
第一次读取总是很慢,随后的读取大约为200ms。该文档非常小,当前只有4个属性,并且只有一个(int)为非null,因此大小不是问题。在真实手机上运行应用程序,在Android 7.1上运行Nexus 6
问题:我做错了什么?我基本上使用的是“使用指南”的“获取数据 ”中的示例。
这样的读取应该花费0毫秒。如果没有解决方法,我想我必须放弃实时存储作为该应用程序的唯一存储的想法,然后回到普通的SQLite并将Firebase / Firestore用作独立的云存储。
UPDATE从版本16.0.0开始DocumentReference.get()和Query.get()具有新的参数“ source”,该参数可控制从何处读取数据-仅服务器,仅缓存或尝试服务器然后缓存。
PS Firestore存储初始化和相应的日志,抱歉,不是500ms,而是350,这是不同的,有时是400,有时是300:
public FirestoreStorage(String userRef) {
Log.i(TAG, "User ref: …Run Code Online (Sandbox Code Playgroud)