Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在寻找从Android处理程序中进行回调的方法_Android_Handlers - Fatal编程技术网

正在寻找从Android处理程序中进行回调的方法

正在寻找从Android处理程序中进行回调的方法,android,handlers,Android,Handlers,这是我的第一个问题,如果有任何歧义,我很抱歉 我正在寻找一种方法来接收来自Android处理程序的回调 例如,如果处理程序是从活动中调用的,那么接收来自它的回调的正确方式是什么,比如修改该活动中屏幕上的一些文本 谢谢! -叶甫盖尼 public class MyHandler extends Handler{ @Override public void handleMessage (Message msg) { //Do something // ???send bac

这是我的第一个问题,如果有任何歧义,我很抱歉

我正在寻找一种方法来接收来自Android处理程序的回调

例如,如果处理程序是从活动中调用的,那么接收来自它的回调的正确方式是什么,比如修改该活动中屏幕上的一些文本

谢谢! -叶甫盖尼

public class MyHandler extends Handler{
  @Override
  public void handleMessage (Message msg) {
    //Do something

    // ???send back the result to the called activity???
  }
}

public class MyActivity extends Activity{

  public void callHandler(){
   MyHandler handler = new MyHandler();
   handler.sendEmptyMessage( 0 );
  }

}

在这一点上,从您所展示的内容来看,拥有一个处理程序并没有多大意义。处理程序是一种附加到创建它的线程的机制,主要用于在同一线程中调度任务,因此如果另一个线程调用callHandler,则处理程序将在调用callHandler的线程所在的任何线程中运行。我发现Android IPC最成功的模式是这样的

public class myActivity extends Activity {
  public Handler mHandler = new Handler()

  public void startAsynchronousTask() {
    // Fill in as necessary, or offload responsibility elsewhere
    new Thread(new Runnable() {
      public void run {
        //Do something in the background
        ...
        updateUI(results)
      }
    }).start();
  }

  public void updateUI(Results results) {
    mHandler.post(new UIUpdater(results));
  }

  private class UIUpdater implements Runnable {
    UIUpdater(Results results) {
      //construct whatever...
    }

    @Override
    public void run() {
      //Update UI
    }
  }
}

简言之,它的作用是启动一个异步任务。。。。当该任务完成时,它调用updateUI。updateUI将要执行的代码放入UI线程,以便修改视图等。这样,就异步任务而言,它所要做的就是调用一个方法来更新UI。事实上,事情有点复杂,但它使您的活动界面保持干净,便于用于任何异步任务。

您尝试过哪些示例程序?谢谢!这很有趣。为什么需要一个updateUI作为一个处理程序来发布另一个runnable?由于您首先要执行一个异步任务,因此可能只需将UI更新为可运行的一部分即可?其思想是您的异步任务可能不属于activity类的一部分。因此,如果在另一个类中,您将此活动注册为回调,那么另一个类可以调用updateUI,而不必知道处理程序/可运行业务。如果异步任务只是从活动中运行,那么可以从异步任务中发布UIUpdater。额外的方法只是为了代码清晰。酷。我想我喜欢这样。谢谢