android等待来自服务器的响应

Ami*_*r.F 4 java events multithreading android httprequest

说我想从服务器执行Http请求,这个过程需要时间.

因为这个,http请求需要在不同的线程上运行(AsyncTask,Runnable等)

但有时我只是在需要时才需要响应,以便更新UI

在循环中使用Thread.sleep来等待响应并不是很好的性能

示例:我想要用户的名字,我向服务器询问它,我必须等待它现在活动调用UserManager调用执行操作的serverHandler并返回结果

也许一个事件系统是有序的,但我不知道如何在我的场景中这样做,坦白说我真的很困惑这个问题

请帮助别人?

Ale*_* Fu 6

这绝对可以通过AsyncTask完成...处理网络请求doInBackground()doInBackground()在完成后,onPostExecute()在UI线程上触发,并且您可以在其中执行将更新UI元素的任何代码.

如果你需要更通用和可重用的东西,你可能想要实现一个回调...我将把UI线程称为客户端,将AsyncTask称为服务器.

  1. 创建一个新接口并创建一些方法存根.

    public interface MyEventListener {
        public void onEventCompleted();
        public void onEventFailed();
    } 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 让您的客户端将MyEventListener的实例传递给服务器.执行此操作的典型方法是让客户端实现接口(MyEventListener)并将其自身传递给服务器.

    public class MyActivity implement MyEventListener {
    
        public void startEvent() {
            new MyAsyncTask(this).execute();
        }           
    
        @Override
        public void onEventCompleted() {
            // TODO
        }
    
        @Override
        public void onEventFailed() {
            // TODO
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. onPostExecute服务器上,检查回调是否为null并调用适当的方法.

    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();
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多关于回调的信息:http://www.javaworld.com/javaworld/javatips/jw-javatip10.html