Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 - Fatal编程技术网

Java 从主线程发布的主线程上的开始线程?

Java 从主线程发布的主线程上的开始线程?,java,android,multithreading,Java,Android,Multithreading,通常我从工作线程启动Runnable,但也可能从主线程调用它。您认为它有任何负面影响吗?您不是在启动线程,而是在主循环器上附加一个处理程序,并向其发送一个运行命令。它将具有与从另一个线程调用它时完全相同的效果。您不是启动线程,而是将处理程序附加到主循环器并向其发送运行命令。它将具有与从另一个线程调用它时完全相同的效果。处理程序在需要向另一个线程发送消息时使用。 如果在主线程中创建处理程序,则可以将消息从后台线程发送到主线程。 最好使新的内部静态类扩展Hadnler,将WeakReference变

通常我从工作线程启动
Runnable
,但也可能从主线程调用它。您认为它有任何负面影响吗?

您不是在启动线程,而是在主循环器上附加一个处理程序,并向其发送一个运行命令。它将具有与从另一个线程调用它时完全相同的效果。

您不是启动线程,而是将处理程序附加到主循环器并向其发送运行命令。它将具有与从另一个线程调用它时完全相同的效果。

处理程序在需要向另一个线程发送消息时使用。 如果在主线程中创建处理程序,则可以将消息从后台线程发送到主线程。
最好使新的内部静态类扩展Hadnler,将WeakReference变量声明为Activity。

处理程序在需要向另一个线程发送消息时使用。 如果在主线程中创建处理程序,则可以将消息从后台线程发送到主线程。 更好地使新的内部静态类扩展Hadnler,将WeakReference变量声明为Activity

  • 处理程序将runnable发布到它所连接的循环器。Runnable只是一个代码段,它将在运行循环器的线程上被调用。在这种情况下,这里的looper是MainLooper,runnable将在主线程上调用
  • 每当您想要更新UI组件时,都应该将runnable发布到主线程

  • 我认为在MainActivity中声明这样的“MainActivity.context”静态字段不够好
  • 处理程序将runnable发布到它所连接的循环器。Runnable只是一个代码段,它将在运行循环器的线程上被调用。在这种情况下,这里的looper是MainLooper,runnable将在主线程上调用
  • 每当您想要更新UI组件时,都应该将runnable发布到主线程

  • 我认为在MainActivity中声明这样的“MainActivity.context”静态字段不够好

  • “MainActivity.context”有什么问题?我总是怀疑为什么在调用不同的方法时上下文总是需要。在iOS中不存在类似的动物。所以我只使用anywhere上下文需要
    “MainActivity.context”
    。MainActivity.context引用什么?您的应用程序或MainActivity?
    context=getApplicationContext()这很好,那么为什么不使用“YourApplication.getContext()”?如果出于某种原因,代码结果是这样的“context=this”,可能会发生内存泄漏。
    “MainActivity.context”有什么问题?
    ?我总是怀疑为什么在调用不同的方法时上下文总是需要。在iOS中不存在类似的动物。所以我只使用anywhere上下文需要
    “MainActivity.context”
    。MainActivity.context引用什么?您的应用程序或MainActivity?
    context=getApplicationContext()这很好,那么为什么不使用“YourApplication.getContext()”?如果出于某种原因,代码结果是这样的“context=this”,那么可能会发生内存泄漏。在执行正常的“方法调用”时,是否会有类似这样的“延迟”发布
    Runnable
    @János是的,这些可运行程序被添加到一个队列中,该队列是在它之前必须做的任何事情之后执行的。当执行一个正常的“方法调用”时,任何“延迟”发布
    Runnable
    像这样从主到主进行比较@是的,这些可运行程序被添加到一个队列中,该队列在之前必须执行的任何操作之后执行
    Handler mainHandler = new Handler(MainActivity.context.getMainLooper());
    mainHandler.post(new Runnable() {
        @Override
        public void run() {
    
            // .. some code                
        }
    });