应用程序中的onCreate是否在升级时运行?

时间:2013-01-15 08:08:06

标签: android upgrade

我想在应用升级期间为我的应用程序制作一些一次性mod。检查android.app.Application文档后,我发现有onCreate但没有onUpgrade(如android.database.sqlite.SQLiteOpenHelper中所示)。

我已将升级代码放在onCreate方法中,但在升级过程中代码是否正在执行时尚不清楚。

升级期间是否onCreated被调用?或者是否有另一种运行升级特定代码的方法?

5 个答案:

答案 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)

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