更新应用程序后 MainApplication 是否总是 运行,即使用户没有打开它?

Will MainApplication always run after updating the app, even if the user does not open it?

我的应用程序有一些小部件,在新版本的应用程序中,这些小部件需要一些额外的数据。我在MainApplication.java中得到了这个数据,但我担心当用户更新时,如果他们不手动打开应用程序,MainApplication不会自动运行。但是,由于小部件已经在主屏幕上,并且由于此数据不可用,小部件将崩溃。

我的恐惧是现实的还是 MainApplication 总是 运行 首先(也在调用 AppWidgetProvider.onUpdate() 之前),即使在应用程序自动更新并且用户根本没有更新之后?

当您的应用程序启动时,首先调用 Application 实现的构造函数,然后立即调用 Application::onCreate() 方法。当您说 "will MainApplication always run first?" 时,我假设这就是您要问的问题。看看文档对 Application::onCreate() 的看法(摘自 here):

Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.

此外,此方法不会在您的应用程序更新时调用,据我所知,它不会在您的应用程序完成更新时调用。

另一方面,AppWidgetProvider.onUpdate()方法在重新安装应用程序后调用。升级你的小部件的代码应该放在里面,所以它会在你的应用程序升级后执行。

public class WidgetProvider extends AppWidgetProvider {

    @Override
    public void onUpdate (Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        //Update your widgets here
    }
}