我想在应用升级期间为我的应用程序制作一些一次性mod。检查android.app.Application文档后,我发现有onCreate
但没有onUpgrade
(如android.database.sqlite.SQLiteOpenHelper中所示)。
我已将升级代码放在onCreate
方法中,但在升级过程中代码是否正在执行时尚不清楚。
升级期间是否onCreated
被调用?或者是否有另一种运行升级特定代码的方法?
答案 0 :(得分:3)
升级期间是否调用了onCreated?
没有。当您的应用程序从其认为“未运行”到“正在运行”的状态开启时,Application.onCreate()
会被调用
应用程序被认为正在运行。它将出现在正在运行的应用程序列表中(并非所有固件都可以显示它们,但是有很多应用程序显示正在运行的程序包,并且有API可以获取此列表)并且可能有一些正在运行的服务或活动,但不一定!系统可以让你的应用程序保持“运行”状态,只要它认为它是nesasery,并且当它需要重新声明一些内存时会杀死它,或者如果你以某种方式明确地杀死它的过程(也有API,但是没理由通常使用它)。
还有另一种运行升级特定代码的方法吗?
as @Class Stacker写道:
如果您在实现新版本时修改版本名称或编号 - 您可以在通过Activity.onCreate()
方法创建版本名称时检查主活动,并将其与保存到sharedPreference的最新版本名称进行比较或数据库表。然后,当您认识到版本发生变化时,您可以实现您想要的任何逻辑。
您可以使用以下代码检查版本名称和编号:
PackageInfo pinfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
Integer versionCode = pinfo.versionCode;
String versionName = pinfo.versionName;
希望它对你有所帮助,祝你好运。
答案 1 :(得分:1)
安卓在包裹操作时发送广播。但是,有问题的包裹要么被排除在接收之外,要么交付不可靠(我不记得目前的具体情况)。所以你无法依赖它。
如果您需要升级修改,可以使用shared preference file标识安装并访问Application#onCreate()中的安装。如果您应用的最新版本也使用了某个文件,那么除非用户删除了所有应用数据,否则它仍会存在。
因此,它只是一些特定用例,因为升级确实并不总是很明显。
请注意,您可以拥有特定于用例的共享首选项文件,其中仅包含您的升级信息。
不要让这个名字欺骗你;如果您想要它,该文件对您的应用程序是私有的(除非某人根据设备,所有投注均已关闭)。
答案 2 :(得分:0)
不确定您正在尝试更新的内容,但您可以针对每个示例SharedPreferences中保存的内容检查您当前的内部版本号。
你可以在这里阅读更多相关内容; How can I check the system version of Android?
答案 3 :(得分:0)
有“ ACTION_MY_PACKAGE_REPLACED”广播: https://developer.android.com/reference/android/content/Intent#ACTION_MY_PACKAGE_REPLACED 您可以使用它来跟踪应用升级事件。如果您要在更新后立即执行某项操作(例如,重新启动服务。
但是,如果您不需要立即运行代码,则最好在启动应用程序时检查版本号是否已更改。只需将以前的版本号存储在某个地方并进行比较即可。
答案 4 :(得分:-2)
在更新期间或更新后没有回调。