【问题标题】:Handler constructor stops a thread in Android处理程序构造函数在 Android 中停止一个线程
【发布时间】:2013-07-17 14:22:52
【问题描述】:
发生了一些奇怪的事情。我无法显示所有代码,但情况是这样的;
Runnable program = new Runnable() {
@Override
public void run() {
//This code is running
new Handler();
//This code not running
}};
new Thread(program).start();
日志什么也没显示。主线程运行良好。
【问题讨论】:
标签:
android
multithreading
handler
【解决方案1】:
您应该始终在 UI 线程中声明 Handler。您需要为 Handler 提供来自某个线程的 Looper。例如来自主 UI 线程:
Handler mHandler = new Handler(Looper.getMainLooper());
Handler 始终在Looper 线程上下文中运行。当您创建另一个线程时,它的上下文与Looper 不同。正确的解决方案是始终在 onCreate()、onStart() 和 onResume() 中声明 Handlers。
【解决方案2】:
创建Handler 需要先对该线程进行Looper 轮询。顺便说一句,通常不需要在 inside 非 UI 线程中创建 Handler。在可运行文件之外创建一个处理程序。一个更简单的替代方法是使用runOnUiThread() 方法。