我在android开发和线程方面有两个问题
1)你认为我什么时候应该在android开发中使用线程?
2)如果我有一个主UI线程等待某个变量在它显示一个toast之前被设置,那么我想在sperate线程中有一个while(true)循环来继续检查该变量。现在,如果设置了变量,如何在将显示Toast的第一个线程(UI线程)上调用该方法
非常感谢
答案 0 :(得分:2)
在大多数情况下,不需要直接使用线程。用于线程编程的android工具很棒,而且易于使用。
您有三个选项可以从另一个线程调用UI线程:
阅读的好文章是Painless Threading。
答案 1 :(得分:1)
永远不会有持续运行的while(true)
循环。它会消耗大量的资源,在你的情况下,它可以完成很少的任务。
线程很适合(主要)后台任务和资源密集型任务(因此不会阻止UI线程)。要创建新线程,请使用以下命令:
new Thread(new Runnable(){
public void run(){
//do stuff here.
}
}
).start();
您还可以查看Android AsyncTask以避免直接使用Thread。
答案 2 :(得分:1)
根据您正在使用的应用类型,正确使用Theads可能是快速响应用户界面的关键。
关键规则:
如果您需要访问任何访问文件系统,网络,图像加载或任何需要超过简单值或状态检查的内容,立即启动并在线程中执行该操作。正如这里已经说过的,虽然我自己经常使用,但有很多选项可供选择:
change_UI_if_needed_to_indicate_click_response();
new Thread(new Runnable(){
do stuff here ;
}).start()
您也可以使用这样的标准(非内联)线程对象。
这可能是不好的做法,我不知道。无论如何,它对我来说效果很好,并不是你问题的重点。
如果你想使用标准Java 在UI线程上运行某些东西,而不是专门允许这些东西的专用Android对象,那么每个视图都附有一个post(Runnable)方法。对我来说,这是将代码重新放回UI线程的最简单方法。
myView.post(new Runnable{
codeForUI();
});
我的一般规则是尝试永远不要在UI线程上运行任何不需要的东西。希望有所帮助。
答案 3 :(得分:0)
如果要阻止应用程序出现当前错误或崩溃“应用程序无响应”,则必须使用线程。 当我称之为网络服务地理定位时,我会使用它。
Good frensh文章:
http://souissihaythem.blogspot.com/2011/08/application-not-responding.html
http://souissihaythem.blogspot.com/2011/08/application-not-responding-solution.html