说我想从服务器执行Http请求,这个过程需要时间。
现在因此,http请求需要在不同的线程上运行(AsyncTask,Runnable等)
但有时我只是在我要求时才需要响应,以便更新UI
在循环中使用Thread.sleep等待响应不是很好的性能
示例:我想要用户的名字,我向服务器询问它,我必须等待它 现在,活动调用UserManager调用执行操作的serverHandler并返回结果
也许一个事件系统是有序的,但我不知道如何在我的场景中做到这一点 坦率地说,我对这个问题感到很困惑
请帮助别人?
答案 0 :(得分:7)
这绝对可以用AsyncTask完成...在doInBackground()
处理网络请求,一旦doInBackground()
完成,在UI线程上触发onPostExecute()
,那就是你的位置可以执行任何将更新UI元素的代码。
如果你需要一些更通用和可重用的东西,你可能想要实现一个回调...我将把UI线程称为客户端,将AsyncTask称为服务器强>
创建一个新界面并创建一些方法存根。
public interface MyEventListener {
public void onEventCompleted();
public void onEventFailed();
}
让您的客户端将MyEventListener的实例传递给服务器。执行此操作的典型方法是让客户端实现接口(MyEventListener)并将其自身传递给服务器。
public class MyActivity implement MyEventListener {
public void startEvent() {
new MyAsyncTask(this).execute();
}
@Override
public void onEventCompleted() {
// TODO
}
@Override
public void onEventFailed() {
// TODO
}
}
在服务器的onPostExecute
上,检查回调是否为空并调用相应的方法。
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private MyEventListener callback;
public MyAsyncTask(MyEventListener cb) {
callback = cb;
}
[...]
@Override
protected void onPostExecute(Void aVoid) {
if(callback != null) {
callback.onEventCompleted();
}
}
}
您可以在此处详细了解回调:http://www.javaworld.com/javaworld/javatips/jw-javatip10.html