我知道没有线程可以访问当前视图,除非它是UI线程。我想知道为什么?为什么哪个线程正在改变视图?这是安全原因吗?这是围绕我用的工作:为什么不能使用UI线程访问视图的线程?
public void doLayout()
{
Runnable run = new Runnable()
{
public void run()
{
ViewerActivity.setContentView(R.layout.main);
}
};
handler.post(run);
}
private Handler handler;'
这是一种痛苦要做到这一点,每次我想改变布局。有没有不同的工作?我知道异步任务,我从来没有找到一个好的方法来使用它,比我在做什么好?所有相关的答案都很有趣!
你应该阅读更多关于Java中锁定/同步(即当使用“同步”) - 一旦你明白,这将是显而易见的,为什么你有为了赴汤蹈火从单独的线程与UI线程进行交互。 –
分离的原因是为了避免死锁。假设你可以自由修改任何线程的视图。假设你正在进行数据库调用。所以,你得到一个视图组件的处理程序,然后查询数据库,但数据库锁定并随后锁定当前线程。现在UI线程也将被锁定,因为您正在修改视图,并且必须等待它被释放才能安全继续。这会产生非常糟糕的程序,最终会导致比目前更多的锁定。 – methodin
大多数用户界面,无论平台和语言如何,都只能访问主用户界面线程中的用户界面,推理通常是,制作线程安全用户界面非常困难,不值得花费精力,而且会导致非常严重的速度损失因为图形用户界面环境需要快速响应。 – nos