Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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_Multithreading_Handler - Fatal编程技术网

Java 在消息处理程序的根目录中启动新线程有意义吗

Java 在消息处理程序的根目录中启动新线程有意义吗,java,android,multithreading,handler,Java,Android,Multithreading,Handler,这应该是一个快速的 我从其他人那里接手了一个项目的开发,在我看来,他们似乎对自己在做什么一无所知。我发现了许多糟糕的代码实践和逻辑错误的例子,我相信这些都会让你和我一样愤怒。我现在处理的是一个代码领域,他们出于未知的原因决定创建大量的消息处理程序。我想他们不明白训练员是干什么的。。。我有一个类,它包含多达4个处理程序,就像所有由同一线程创建的类字段一样!其中一个处理程序如下所示: private Handler messageHandler1 = new Handler() { publ

这应该是一个快速的

我从其他人那里接手了一个项目的开发,在我看来,他们似乎对自己在做什么一无所知。我发现了许多糟糕的代码实践和逻辑错误的例子,我相信这些都会让你和我一样愤怒。我现在处理的是一个代码领域,他们出于未知的原因决定创建大量的消息处理程序。我想他们不明白训练员是干什么的。。。我有一个类,它包含多达4个处理程序,就像所有由同一线程创建的类字段一样!其中一个处理程序如下所示:

private Handler messageHandler1 = new Handler() {
    public void handleMessage(final Message msg) {
        super.handleMessage(msg);

        new Thread() { // why are we starting a thread in the root of a message handler?!
            public void run() {
                super.run();

                    // some code...
            }
        }.start();
    }
};
除了无用的变量名之外,我更关心的是在处理程序的根目录下创建一个新线程。我对处理程序的理解是,它们允许您在另一个线程上运行代码,因此一个线程可以使用另一个线程的处理程序在另一个线程上运行代码。。。那么,如果你想直接创建一个新线程,那么首先使用处理程序肯定是毫无意义的?!我只是想让一个更有智慧的人在我移除这个处理器并以正确的方式(我认为是)之前确认一下(或者不确认)


谢谢

一个
处理程序
总是指向一个
线程
。 当处理程序接收到消息时,最佳实践是处理程序在其自己的线程上处理消息。这就是创建处理程序的第一步


处理程序内启动新线程。handleMessage()
充其量是一个奇怪的选择。

处理程序总是指向
线程。
当处理程序接收到消息时,最佳实践是处理程序在其自己的线程上处理消息。这就是创建处理程序的第一步


处理程序内启动一个新线程。handleMessage()
充其量是一个奇怪的选择。

这取决于,如果所有
消息都要并行处理,您需要在此处使用一个新的
线程(或任何其他异步执行方式,如
ExecutorService
),如果要在后台按顺序处理它们,只需使用
HandlerThread
,而对软件一无所知,很难说为什么会这样做,但创建这样的线程肯定不是一个好迹象。如果软件需要运行异步作业,则至少使用线程池,其形式为
ExecutorService
super.run()调用
线程的匿名子类也是不必要的。好的一点,我没有这样想过,所以一般来说这是可以的,但是(得到这个)。。。这个处理程序实际上在整个项目中只使用一次。它是在应用程序激活过程中发生的一次性调用。因此,并行处理多条消息的概念与此无关。所以我认为这绝对是我的前任完全无知的另一个迹象!谢谢各位。这取决于,如果要并行处理所有的
消息
,您需要一个新的
线程
(或任何其他异步执行方式,如
ExecutorService
),如果要在后台按顺序处理它们,只需使用
HandlerThread
,而对软件一无所知,很难说为什么会这样做,但创建这样的线程肯定不是一个好迹象。如果软件需要运行异步作业,则至少使用线程池,其形式为
ExecutorService
super.run()调用
线程的匿名子类也是不必要的。好的一点,我没有这样想过,所以一般来说这是可以的,但是(得到这个)。。。这个处理程序实际上在整个项目中只使用一次。它是在应用程序激活过程中发生的一次性调用。因此,并行处理多条消息的概念与此无关。所以我认为这绝对是我的前任完全无知的另一个迹象!谢谢各位。