在widget中运行runUnUiThread

时间:2015-02-06 20:08:01

标签: java android android-widget ui-thread

我想在我构建的app小部件中创建一个HTTP请求。

这个想法是,每隔几个小时,窗口小部件就会通过发出HTTP请求来更新自己,并使用它的信息来更新其视图。

我已经尝试在Thread函数中使用onUpdate,HTTP请求工作正常,问题是我无法使用runOnUiThread()更新视图,因为我没有父活动来运行此功能。

是否有其他方法可以更新Thread内的小部件视图?

示例代码:

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    for (int i=0; i<N; i++) {
        final int appWidgetId = appWidgetIds[i];

        final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_card);

        Thread thread = new Thread(new Runnable() {
           @Override
           public void run() {
              try {
                 Http.Response resp = Http.postData("http://www.example.com", null, null, null);
                 views.setTextViewText(R.id.textview, resp.body);
              }
              catch (Exception ex) {
                  Log.e(TAG, Log.getStackTraceString(ex));
              }
         }
     }
}

先谢谢你。

1 个答案:

答案 0 :(得分:1)

  

我已经尝试在onUpdate函数中使用Thread

这不是一个好主意。您的流程可以在工作完成之前终止。相反,创建一个IntentService来执行网络I / O并通过AppWidgetManager更新应用小部件。

  

问题是我无法使用runOnUiThread()更新视图,因为我没有父活动来运行此功能

由于您没有要更新的任何视图,因此您无需担心这一点。您可以设置RemoteViews并将其移至背景线程中的AppWidgetManager