我有一个小部件需要在另一个线程中执行一些操作。它有一个方法可以处理一些数据并在小部件上的 TextView 中显示结果。
要实现这一点,我需要在单独的线程中调用我的方法。然后我需要在该方法的末尾包含一些代码以在小部件上显示结果(类似于textView1.setText("my results");
。
这必须在 UI 线程中完成。我想使用该方法runOnUiThread
。但它只存在于一个活动。是小部件类有这种方法的类似物吗?我该怎么做才能在我的小部件中使用该方法?
这是我的代码:
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
//...
//here I need to launch a method toBeLaunchedInASeparateThread in a separate thread
}
public void toBeLaunchedInASeparateThread()
{
// ... many operations
int result = 0;
//here I need to launch the following line in the UI thread to follow Android guidelines
setTextToTextView(context, "My result is " + result);
}
public static void setTextToTextView(Context context, String text)
{
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_sample);
views.setTextViewText(R.id.widgetTextViewCard, text);
ComponentName myWidget = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(manager.getAppWidgetIds(myWidget), views);
}
}