繁体   English   中英

AppWidget在启动时出现问题(应用程序在初始化过程中重新启动)

[英]AppWidget trouble on Boot (application gets restarted in the middle of initialization)

我有一个股票市场跟踪Android应用程序,它带有一个AppWidget来显示价格。 通常情况下,它工作正常,尽管在启动后第一次加载时似乎有一些麻烦。

加载顺序应该像这样工作:

  1. 手机靴
  2. AppWidget onUpdate被调用。
  3. AppWidget需要来自Internet的数据,启动一项从Internet提取报价的服务:

     Log.d("PortfolioMap", "Widget is requesting a MANUAL_UPDATE"); Intent newIntent = new Intent(context.getPackageName() + ".MANUAL_UPDATE"); context.startService(newIntent); 
  4. Internet更新完成后,缓存将生成自定义Application类, sendBroadcastsendBroadcast到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); 
  5. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM