【问题标题】:Android : Network operations in AppwidgetAndroid : Appwidget 中的网络操作
【发布时间】:2010-08-22 13:30:16
【问题描述】:

我正在为我的应用程序开发一个 Android AppWidget。为了更新我的 appwidget,我需要从网络下载数据。但是当我尝试在 onUpdate 方法中这样做时,我的 appWidget 被 Android 系统杀死了。我了解到无法在接收器中完成耗时的操作,因此我从 onUpdate 方法启动了一个服务并从中启动了一个线程。但问题仍然存在。 谁能告诉我如何在 Appwidget 中进行网络操作?

【问题讨论】:

    标签: android networking operations android-appwidget


    【解决方案1】:

    将下载工作委托给服务,可能是IntentService,也可能是WakefulIntentService,具体取决于设备在工作期间是否存在睡眠的风险。

    您的AppWidgetProvider 只会在您的IntentService 上调用startService()

    您的IntentService's onHandleIntent() 方法将完成您目前在onUpdate() 中的工作,通过静态getInstance() 方法获得自己的AppWidgetManager。但是,由于onHandleIntent() 是在后台线程上执行的,因此您可以根据需要花费尽可能多的时间。 IntentService 在处理完所有未完成的工作请求后也会自动关闭。

    【讨论】:

    • 但是如何将它与 RemoteViewsService 的使用结合起来呢?异步操作完成后是否应该提到 IntentService 启动 RemoteViewsService?
    • @Malachiasz:“应该提到 IntentService 在异步操作完成后启动 RemoteViewsService 吗?” - 不。 RemoteViewsService 将被应用小部件框架自动使用。您需要确保RemoteViewsService 知道IntentService 所做的任何数据更改,例如IntentService 更新RemoteViewsService 需要从中提取的数据库。应该有一种方法可以让应用程序小部件然后从RemoteViewsService 重新加载其视图,尽管我没有对此进行研究,也不知道它是如何完成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多