我的应用程序有一些小部件,在新版本的应用程序中,需要一些额外的数据。我在MainApplication.java
中获取此数据,但我担心当用户更新时,如果他们不手动打开应用程序,MainApplication
将无法自动运行。但是,由于小部件已经在主屏幕上,并且由于此数据将不可用,因此小部件将崩溃。
我的恐惧是现实的还是MainApplication
总是先运行(也就是在调用AppWidgetProvider.onUpdate()
之前),即使在应用程序自动更新且用户根本没有它之后?
启动应用程序时,首先调用Application
实现的构造函数,然后调用Application::onCreate()
方法。当你说“MainApplication
会先跑吗?”时,我假设你问的是这个问题。看看文档中关于Application::onCreate()
的内容(取自here):
在应用程序启动时调用,在创建任何活动,服务或接收方对象(不包括内容提供程序)之前调用。
此外,当您的应用更新时,系统不会调用此方法,据我所知,当您的应用完成更新时,系统不会调用此方法。
另一方面,在重新安装应用程序后调用AppWidgetProvider.onUpdate()
方法。升级小部件的代码应放在其中,因此它将在应用程序升级后执行。
public class WidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate (Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
//Update your widgets here
}
}