我读到android中的主UI线程不应该调用睡眠。
但是,我的应用程序需要:
使用两个线程的输出(2个图像),添加它们,然后显示它们。
我使用Thread.sleep(),以便主线程等待thread1和thread2,直到它们完成为止。但是,当我在主线程中调用它(在睡眠后)之后,mImageview.setbitmap就不能工作了。
你能告诉我该怎么做吗?
发布于 2012-04-10 10:51:45
Android中的多线程应该异步执行。为此,您应该使用-class。
例如,对于您的情况,您可以创建一个taks来加载(或处理)这两个映像。当进程正在运行时(在另一个线程中,在UI线程之外),您可以向用户显示一个ProgressBar,它向用户显示您的应用程序当前很忙(然后在UI线程上完成)。
当任务完成后,您将从任务中获得结果(两个图像),隐藏进度栏并向用户显示所有内容。
尽管一个没有反应的图形用户界面总是有一种感觉,如果用户界面线程被阻塞超过5秒(这是一个很长的时间),你的应用程序将被强制关闭,因为它不是“反应”(并且一个ANR将被提升)。
发布于 2012-04-10 10:59:32
这不仅仅是Thread.Sleep()。在GUI线程中,执行启动两个线程/任务/任何事情所需的任何操作,然后退出事件处理程序。
不要在GUI事件处理程序中等待!不是在爪哇,C++,C,德尔菲,任何东西。使用异步任务或Handler,并向GUI线程发送信号。线程1表示已完成,线程2表示已完成。在这两种情况下,检查数据是否已由另一个线程返回。如果有,则有两组返回的数据,因此可以添加它们并显示它们。
不要在GUI事件处理程序中等待。
发布于 2012-04-10 11:51:38
为此,您可以简单地使用线程和处理程序。这是一个小小的演示,
在您的中创建一个,如下所示,
Drawable d=null;
Handler handler=new Handler()
{
public void handleMesaage(Message msg)
{
if(msg.what==0)
{
imageView.setBackgroundDrawable(d);
}
}
};现在就这样叫你的丝线,
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();https://stackoverflow.com/questions/10087274
复制相似问题