2

我想在应用程序升级期间对我的应用程序进行一些一次性的修改。检查android.app.Application文档,我注意到有onCreate但没有onUpgrade(就像在android.database.sqlite.SQLiteOpenHelper中一样)。

我已将升级代码放入onCreate方法中,但不清楚升级期间是否正在执行代码。

onCreated在升级期间调用?还是有另一种运行升级特定代码的方法?

4

5 回答 5

4

升级期间是否调用了 onCreated?

不。Application.onCreate()当您的应用程序从它认为“未运行”到“正在运行”的状态打开时调用

应用程序在其包具有一个或多个活动进程时被视为正在运行。它会出现在正在运行的应用程序列表中(并非所有固件都可以显示它们,但是有很多应用程序显示正在运行的软件包,并且有 API 可以获取此列表)并且可能有一些正在运行的服务或活动,但不一定!系统可以将您的应用程序保持在“运行”状态,只要它认为它不合适,并且当它需要重新声明一些内存时会杀死它,或者如果您以某种方式显式杀死它(也有 API,但是通常没有理由使用它)。

还有另一种运行升级特定代码的方法吗?

正如@Class Stacker 所写:如果您在实现新版本时正在修改版本名称或编号 - 您可以在通过Activity.onCreate()版本名称方法创建主要活动时检查您的主要活动,并将其与您保存到 sharedPreference 的最后一个版本名称进行比较或数据库表。然后,当您认识到您的版本已更改时,您可以实现您想要的任何逻辑。

您可以使用以下代码检查版本名称和编号:

     PackageInfo pinfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
     Integer versionCode = pinfo.versionCode; 
     String versionName = pinfo.versionName; 

希望对你有帮助,祝你好运。

于 2013-01-15T12:42:32.317 回答
1

有 Android 在打包操作时发送的广播。但是,有问题的包裹要么被排除在接收范围之外,要么交付不可靠(我现在不记得确切的情况)。所以没有什么可以依赖的。

如果您需要升级修改,您可以使用共享首选项文件,您可以在其中标识安装并在 Application#onCreate() 中访问该文件。如果您的应用程序的最后一个版本也使用了一个文件,那么除非用户删除所有应用程序数据,否则它仍然存在。

因此,这都是特定于用例的,因为升级的真正含义并不总是很明显。

请注意,您可以拥有一个特定于用例的共享首选项文件,其中仅包含您的升级信息。

不要让名字欺骗你;如果您希望该文件是您的应用程序的私有文件(除非有人植根该设备,在这种情况下所有赌注都已关闭)。

于 2013-01-15T08:22:53.500 回答
0

不确定您到底要更新什么,但您可以根据示例 SharedPreferences 中保存的版本检查当前版本号。

你可以在这里阅读更多相关信息;如何查看安卓系统版本?

于 2013-01-15T08:10:57.770 回答
0

有“ACTION_MY_PACKAGE_REPLACED”广播: https ://developer.android.com/reference/android/content/Intent#ACTION_MY_PACKAGE_REPLACED 您可以使用它来跟踪应用升级事件。如果您想在更新后立即执行某些操作(例如重新启动服务),这很有用。

但是如果您不需要立即运行代码,最好在启动应用程序时检查版本号是否更改。只需将以前的版本号存储在某处并进行比较。

于 2018-10-07T21:21:42.827 回答
-2

更新期间或更新后没有回调。

于 2013-01-15T08:10:46.367 回答