Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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
Java 事件还是处理程序?从线程调用方法_Java_Android_Events_Handler - Fatal编程技术网

Java 事件还是处理程序?从线程调用方法

Java 事件还是处理程序?从线程调用方法,java,android,events,handler,Java,Android,Events,Handler,考虑一个简单的Android应用程序:后台有两个TabActivities和一个线程从服务器获取整数值。如果数字为偶数,则必须在第一个选项卡中显示,否则在第二个选项卡中显示。显然,我会做一些更复杂的事情,但这是基本模式。我该怎么做呢?我挠头已经有一天了,下面是我遇到的一些事情: 事件处理程序的使用。这两个TabActivities注册用于侦听my_事件,当线程接收到一个值时,它“抛出my_事件”,然后调用这两个活动中的特定方法并传递该值 处理程序的使用 我以前没有使用过这两个概念,我想知道哪一个

考虑一个简单的Android应用程序:后台有两个TabActivities和一个线程从服务器获取整数值。如果数字为偶数,则必须在第一个选项卡中显示,否则在第二个选项卡中显示。显然,我会做一些更复杂的事情,但这是基本模式。我该怎么做呢?我挠头已经有一天了,下面是我遇到的一些事情:

  • 事件处理程序的使用。这两个TabActivities注册用于侦听my_事件,当线程接收到一个值时,它“抛出my_事件”,然后调用这两个活动中的特定方法并传递该值

  • 处理程序的使用


  • 我以前没有使用过这两个概念,我想知道哪一个可能是更好/正确的方法。此外,沿着所选路线的任何更多提示将不胜感激。此外,该线程是否应该从服务类运行?

    当您创建线程时,只需将选项卡的对象传递给它,然后在执行过程中,您就可以轻松地将所需的文本放入选项卡。

    您可能希望使用AYSNTASK查看。如果执行此操作,则需要将值插入onProgressUpdate()方法中的相应选项卡中。由于传递给此方法的参数实际上可能无法充分表示传入的数据,因此您只需要将新数据放在可以从onProgressUpdate()方法访问的位置,可能是在一个成员变量中。请记住,对该成员变量的访问可能需要同步,因为onProgressUpdate中的代码在应用程序的主线程上运行,而doInBackground中的代码在后台线程上运行,因此这些方法中的代码将同时运行

    AsyncTask为您透明地使用处理程序,但如果需要,您可以使用原始处理程序。你需要记住的基本事情是

    • 您只能/应该从主应用程序线程更新UI
    • 处理程序中的代码将始终在创建处理程序的线程上运行
    • 必须在具有循环器的线程上创建处理程序(主线程具有循环器)
    • 如果将处理程序创建为匿名内部类或向其传递对上下文的引用,请小心,因为这可能会导致内存泄漏

    该线程可能应该由服务调用,但是如果该线程只需要在有UI可供更新时存在,那么这一点可能没有什么意义

    谢谢,但是我打算在从线程接收事件时执行的功能要复杂得多,因此我不打算在线程中执行。谢谢。。我最终构建了自己的事件处理程序,看起来它们工作得很好。。