首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UI线程等待其他线程执行-不工作

UI线程等待其他线程执行-不工作
EN

Stack Overflow用户
提问于 2012-04-10 10:45:43
回答 4查看 1.1K关注 0票数 0

我读到android中的主UI线程不应该调用睡眠。

但是,我的应用程序需要:

  1. 从主UI线程调用thread1
  2. 从主UI线程调用thread2。

使用两个线程的输出(2个图像),添加它们,然后显示它们。

我使用Thread.sleep(),以便主线程等待thread1和thread2,直到它们完成为止。但是,当我在主线程中调用它(在睡眠后)之后,mImageview.setbitmap就不能工作了。

你能告诉我该怎么做吗?

EN

回答 4

Stack Overflow用户

发布于 2012-04-10 10:51:45

Android中的多线程应该异步执行。为此,您应该使用-class

例如,对于您的情况,您可以创建一个taks来加载(或处理)这两个映像。当进程正在运行时(在另一个线程中,在UI线程之外),您可以向用户显示一个ProgressBar,它向用户显示您的应用程序当前很忙(然后在UI线程上完成)。

当任务完成后,您将从任务中获得结果(两个图像),隐藏进度栏并向用户显示所有内容。

尽管一个没有反应的图形用户界面总是有一种感觉,如果用户界面线程被阻塞超过5秒(这是一个很长的时间),你的应用程序将被强制关闭,因为它不是“反应”(并且一个ANR将被提升)。

票数 1
EN

Stack Overflow用户

发布于 2012-04-10 10:59:32

这不仅仅是Thread.Sleep()。在GUI线程中,执行启动两个线程/任务/任何事情所需的任何操作,然后退出事件处理程序。

不要在GUI事件处理程序中等待!不是在爪哇,C++,C,德尔菲,任何东西。使用异步任务或Handler,并向GUI线程发送信号。线程1表示已完成,线程2表示已完成。在这两种情况下,检查数据是否已由另一个线程返回。如果有,则有两组返回的数据,因此可以添加它们并显示它们。

不要在GUI事件处理程序中等待。

票数 0
EN

Stack Overflow用户

发布于 2012-04-10 11:51:38

为此,您可以简单地使用线程和处理程序。这是一个小小的演示,

在您的中创建一个,如下所示,

代码语言:javascript
复制
Drawable d=null;    

Handler handler=new Handler()
{

public void handleMesaage(Message msg)
{
   if(msg.what==0)
{
   imageView.setBackgroundDrawable(d);
}

}

};

现在就这样叫你的丝线,

代码语言:javascript
复制
Thread t=new Thread(new Runnable()
{
@Override
public void run() {
   InputStream is = (InputStream) new URL(url).getContent();
   d = Drawable.createFromStream(is, "src name");
    handler.sendEmptyMessage(0);
}
});t.start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10087274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档