小部件内的 runOnUiThread
runOnUiThread inside a widget
我想在我构建的应用程序小部件中发出 HTTP 请求。
这个想法是每隔几个小时,小部件就会通过发出 HTTP 请求来更新自己,并使用它的信息来更新它的视图。
我已经尝试在 onUpdate
函数中使用 Thread
,HTTP 请求工作正常,问题是我无法使用 runOnUiThread()
进行更新意见,因为我没有parentactivity到运行这个功能上。
是否有另一种方法可以在 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));
}
}
}
}
先谢谢你。
I've already tried to use a Thread in onUpdate function
这不是个好主意。您的流程可以在您的工作完成之前终止。相反,创建一个 IntentService
来执行网络 I/O 并通过 AppWidgetManager
.
更新应用小部件
the problem is that I can't use runOnUiThread() to update the views, because I have no parent activity to run this function on
由于您没有任何要更新的视图,因此您不必担心这一点。您可以设置 RemoteViews
并将它们交给后台线程上的 AppWidgetManager
。
我想在我构建的应用程序小部件中发出 HTTP 请求。
这个想法是每隔几个小时,小部件就会通过发出 HTTP 请求来更新自己,并使用它的信息来更新它的视图。
我已经尝试在 onUpdate
函数中使用 Thread
,HTTP 请求工作正常,问题是我无法使用 runOnUiThread()
进行更新意见,因为我没有parentactivity到运行这个功能上。
是否有另一种方法可以在 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));
}
}
}
}
先谢谢你。
I've already tried to use a Thread in onUpdate function
这不是个好主意。您的流程可以在您的工作完成之前终止。相反,创建一个 IntentService
来执行网络 I/O 并通过 AppWidgetManager
.
the problem is that I can't use runOnUiThread() to update the views, because I have no parent activity to run this function on
由于您没有任何要更新的视图,因此您不必担心这一点。您可以设置 RemoteViews
并将它们交给后台线程上的 AppWidgetManager
。