使用服务中的AsyncTask接收的数据更新UI
我有一个启动并绑定服务的活动。 该服务使用一些HttpPost执行AsyncTask并处理接收到的数据以从结果中获取一些变量。 如何使用这些数据更新活动中的用户界面,并尽快将服务从HttpPost中获取?我应该使用ResultReceiver还是有更好的方法?使用服务中的AsyncTask接收的数据更新UI
更新:
我想我会用的BroadcastReceiver或可观察对象。
有一些possibilites:
你的服务可以发送brodcast(sendBroadcast)和你的活动只需要注册一个根据你的broacastReceiver您的服务实现的。类似的东西: 您的服务:
Intent intent = new Intent();
intent.setAction("youAction");
intent.putExtra("url",uri.toString());
sendBroadcast(intent);
在你的应用程序的AndroidManifest:
<receiver android:name="MyReceiver" >
<intent-filter>
<action android:name="yourAction" />
</intent-filter>
</receiver>
你的活动:
private class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
String url = arg1.getExtras().getString("url");
//Here you can update your UI
}
此链接可以HELO你:http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html
第二种方法是在你的服务上注册一个监听器a nd通知你的服务监听器。
在服务:
void onSomethingHappened()
{
activityListener.notifyProgressBar();
}
void subscribe(YourInterface listener)
{
actibityListener = listener;
}
In you activity, after start you service:
service.subscribe(this);
然而,为了更好的解决方案,你应该考虑到你的服务实现(类型)。
此链接约AndroidService可能是有用的。
但是,另一个重点是,您的选择取决于您如何实现异步任务。取决于你在每种方法上做了什么,preExucute,doInBackground,onProgressUpdate和postExecute。
您必须记住,您将从AndroidUIThread以外发生的事件更新您的用户界面,因此如果您尝试直接更新用户界面,将会遇到问题。要解决此问题,您可以使用您的actitivy的方法runOnUiThread,您可以使用Handler。
在doInBackground()中下载数据。在onpreExecute()中显示进度对话框。在onPostExecute()中关闭对话框。用onPostExecute()中的数据更新UI。
如果绑定,您可以将数据发送回活动 – njzk2 2013-02-28 12:55:52
我必须更新AsyncTask中的接口。我不认为我可以使用债券,对吧? – Nifhel 2013-02-28 16:16:06