2016-09-28 138 views
0
Handler mainHandler = new Handler(MainActivity.context.getMainLooper()); 
mainHandler.post(new Runnable() { 
    @Override 
    public void run() { 

     // .. some code     
    } 
}); 

通常我从工作线程开始Runnable,但它可能发生,它是从主线程调用的。你认为它有什么负面影响?从主线程发布的主线程启动线程?

回答

4

你没有启动线程,你将一个Handler附加到主Looper并发送一个命令来运行。它将具有与从另一个线程调用时完全相同的效果。

+0

当正常的'方法调用'被执行时,是否有任何'延迟'发布'Runnable'这样的从主到主比较? –

+1

@János是的,这些runnables被添加到队列中,并且在之前的任何事情之后被执行 – Kiskae

-1

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

0
  1. 处理程序会将runnable发布到它附加的活套。 Runnable只是一个代码段,它将在循环运行的线程上调用。在这种情况下,这里的活套是MainLooper,并且可以在MainThread上调用runnable。

无论何时你想更新你的UI组件,你应该将你的runnable发布到主线程。

  1. 我觉得在MainActivity中声明一个像这个“MainActivity.context”这样的静态字段是不够的。
+0

“MainActivity.context”有什么问题?我总是怀疑为什么上下文总是需要调用不同的方法。在iOS中不存在类似的动物。所以我只需要在任何地方使用''MainActivity.context'''。 –

+0

MainActivity.context引用了什么?你的应用程序或MainActivity? – Bennyhuo

+0

'context = getApplicationContext();' –