gpt4 book ai didi

android - 向后兼容的 BackupAgent

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:47 26 4
gpt4 key购买 nike

我正在考虑使用自 Android 2.2 以来可用的新备份 API,但需要保持向后兼容性(准确地说是 1.5)。

文档状态:

The backup service and the APIs you must use are available only on devices running API Level 8 (Android 2.2) or greater, so you should also set your android:minSdkVersion attribute to "8". However, if you implement proper backward compatibility in your application, you can support this feature for devices running API Level 8 or greater, while remaining compatible with older devices.

我确实是针对level 8 targetSdkVersion 和level 3 minSdkVersion 构建的,并尝试使用包装类(带反射)来克服应用程序无法运行的问题如果您实现的类扩展了不存在的类。

这就是问题所在:因为我们自己没有对 BackupHelper 类进行实际调用,所以我们无法预先检查该类是否确实存在。 (正如 Android 向后兼容性文档中使用 checkAvailable() 方法所解释的那样。)因此,该类将被实例化并转换为 BackupAgent。但是由于我们使用反射,它实际上并没有覆盖 BackupAgent 并且在请求备份时在运行时发生异常:

java.lang.RuntimeException: Unable to create BackupAgent org.transdroid.service.BackupAgent: java.lang.ClassCastException: org.transdroid.service.BackupAgent

这是我实现向后兼容的 BackupAgent 的方法:http://code.google.com/p/transdroid/source/browse/#svn/trunk/src/org/transdroid/service其中 BackupAgent.java 是“常规”BackupAgentHelper 扩展类,BackupAgentHelperWrapper 是基于反射的包装类。

有人成功实现了具有向后兼容性的 BackupAgent 吗?

最佳答案

作为替代方案,您可以只使用纯反射来与 BackupManager 对话:

public void scheduleBackup() {
Log.d(TAG, "Scheduling backup");
try {
Class managerClass = Class.forName("android.app.backup.BackupManager");
Constructor managerConstructor = managerClass.getConstructor(Context.class);
Object manager = managerConstructor.newInstance(context);
Method m = managerClass.getMethod("dataChanged");
m.invoke(manager);
Log.d(TAG, "Backup requested");
} catch(ClassNotFoundException e) {
Log.d(TAG, "No backup manager found");
} catch(Throwable t) {
Log.d(TAG, "Scheduling backup failed " + t);
t.printStackTrace();
}
}

将 android:backupAgent 直接指向 v2.2 类;它永远不会加载到 v2.2 之前的 VM 上,因此不会有任何链接问题。

关于android - 向后兼容的 BackupAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com