我想在我构建的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));
}
}
}
}
先谢谢你。
答案 0 :(得分:1)
我已经尝试在onUpdate函数中使用Thread
这不是一个好主意。您的流程可以在工作完成之前终止。相反,创建一个IntentService
来执行网络I / O并通过AppWidgetManager
更新应用小部件。
问题是我无法使用runOnUiThread()更新视图,因为我没有父活动来运行此功能
由于您没有要更新的任何视图,因此您无需担心这一点。您可以设置RemoteViews
并将其移至背景线程中的AppWidgetManager
。