[英]AppWidget trouble on Boot (application gets restarted in the middle of initialization)
我有一个股票市场跟踪Android应用程序,它带有一个AppWidget来显示价格。 通常情况下,它工作正常,尽管在启动后第一次加载时似乎有一些麻烦。
加载顺序应该像这样工作:
onUpdate
被调用。 AppWidget需要来自Internet的数据,启动一项从Internet提取报价的服务:
Log.d("PortfolioMap", "Widget is requesting a MANUAL_UPDATE"); Intent newIntent = new Intent(context.getPackageName() + ".MANUAL_UPDATE"); context.startService(newIntent);
Internet更新完成后,缓存将生成自定义Application
类, sendBroadcast
将sendBroadcast
到AppWidget接收器以刷新数据。
Log.d("PortfolioMap", "Updating portfolio with results for " + updateData.size() + " stocks with value " + dbgValue); Intent newIntent = new Intent(getPackageName() + ".DATA_UPDATE_COMPLETE"); this.sendBroadcast(newIntent);
AppWidget接收广播,调用onUpdate以绘制新数据。
public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Log.d("PortfolioMap", "Widget received broadcast " + intent.getAction()); ... this.onUpdate(context, appWidgetManager, ids); }
实际发生的情况是,在第4步(发送DATA_UPDATE_COMPLETE广播)和第5步(接收DATA_UPDATE_COMPLETE广播)之间,大约有10秒的延迟,在该延迟中我的应用程序重新启动(在步骤4之后第二次调用Application
类的onCreate
)。
使用新的PID重新启动应用程序之后,它仍然接收到应用程序的第一个实例发送的广播,但是此时应用程序数据已被清除。
有谁知道为什么在加载过程中会重置我的应用程序,为什么即使在重置应用程序后仍能收到广播? 这对我来说似乎很奇怪。 似乎总是在Motorola广播ACTION_WIDGET_ADDED
之后立即重新启动,但是我不确定这是否相关或这意味着什么。
这是我的日志。 请注意,PID在最后三行中如何变化,并且第二次显示“正在创建应用程序”。
21:37:55.347: D/PortfolioMap(4299): Application is being created
21:37:55.467: D/PortfolioMap(4299): Widget received broadcast android.appwidget.action.APPWIDGET_ENABLED
21:37:55.477: D/PortfolioMap(4299): Widget onUpdate called
21:37:55.477: D/PortfolioMap(4299): Widget is requesting a MANUAL_UPDATE
21:37:55.497: D/PortfolioMap(4299): InternetUpdater received broadcast MANUAL_UPDATE
21:37:55.927: D/PortfolioMap(4299): Updating portfolio with results for 3 stocks with value 8973.326
21:38:05.337: D/PortfolioMap(4299): Widget received broadcast com.motorola.blur.home.ACTION_WIDGET_ADDED
21:38:18.417: D/PortfolioMap(4778): Application is being created
21:38:18.497: D/PortfolioMap(4778): Widget received broadcast com.karwosts.PortfolioMap.DATA_UPDATE_COMPLETE
21:38:18.497: D/PortfolioMap(4778): Starting widget redraw with portfolio 'All Portfolios' (value:0.0)
我曾与一家主要的设备制造商打交道,并亲自进行了观察。 有人评论说,在系统启动时,操作系统没有足够的分配内存,并且被迫杀死任何活动进程,并在完成操作系统初始化时重新分配它们。 这很可能解释您的观察。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.