【问题标题】:Getting data from AsyncTask for widget从小部件的 AsyncTask 获取数据
【发布时间】:2018-02-13 11:23:16
【问题描述】:

我正在使用 AsyncTask 从 Internet 下载一些 JSON 天气数据(城市名称和温度),我还有一个需要下载信息的小部件,小部件每 30 分钟更新一次,我可以使用 SharedPreferences 传输城市名称和静态变量。所以每次更新它都会获取数据。城市信息不会像温度那样经常变化。那么即使应用程序没有运行并且在过去 30 分钟内没有打开,我如何才能显示来自AsyncTask 的温度信息? 我应该在WidgetProvider 中设置另一个AsyncTask 吗?还是有更简单的方法?

【问题讨论】:

    标签: android json android-asynctask


    【解决方案1】:

    您可以使用任何您需要的持久性工具来保存信息并让小部件独立使用该信息。

    例如,将所有信息保存到文件中,让小部件知道文件名或数据库...

    在这种情况下,静态变量是个坏主意。

    【讨论】:

    • 但是如果用户还没有打开应用程序,所以异步任务没有执行,小部件如何下载数据?
    • @DTV 对于长时间运行的操作和投票,您应该使用Service 而不是AsyncTask
    【解决方案2】:

    在这种情况下只需使用 IntentService。每 5/15/30 分钟和自己获取数据更新小部件后通过警报触发它。正如您所提到的,android 对小部件提供程序 xml 更新时间有限制(最短时间是每 30 分钟一次),但是对自己更新没有限制。因此,在您的 IntentService 中获取您的数据,然后:

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
    int widgetIds[] = appWidgetManager.getAppWidgetIds(new ComponentName(context,
                    WidgetClass.class));
    RemoteViews views = new RemoteViews(context, R.id.widget_layout);//configure here your remoteViews
    appWidgetManager.updateAppWidget(widgetIds, views);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2021-01-04
      • 2020-08-14
      • 2016-10-26
      相关资源
      最近更新 更多