查看几个android示例,我看到使用join()方法暂停线程的趋势:
编辑:请假设2个线程已正确定义。编辑了加入()
的调用public class MainUI extends Activity{
private GraphicsViewThread g;
private BackendDataViewThread b;
void onCreate(){
g = new GraphicsViewThread();
g.start();
b = new BackendDataViewThread();
b.start();
}
.
.
.
void pauseGame(){
try {
g.join();
}catch (InterruptedException e){
e.printStackTrace();
}
try {
b.join();
}catch (InterruptedException e){
e.printStackTrace();
}
GraphicsViewThread = null;
BackendDataViewThread = null;
}
}
答案 0 :(得分:4)
我怀疑你的代码没有编译,但无论如何 - 我会回答。
这不仅仅是关于Android,而是简单的Java。
使用“join”可确保代码等待线程结束。
这不正是你想要的吗?
另外,不要将thread的引用设置为null。
您不能确切地确定线程何时结束,因此在线程对象结束之前将线程对象设置为null将是不好的做法。
答案 1 :(得分:0)
这是一个集合函数,这意味着您引用的线程(例如GraphicsViewThread)将在该点(首先到达那里)加入父/ main / UI线程。这是实际绘制UI的线程。您不能只将引用设置为null,因为它只是一个引用。任务仍将在后台运作。
就我使用Android而进行分析时,我学会了避免使用Threads。使用,AsyncTask或其他类似的容器。它更容易管理。
编辑: 我刚刚注意到,正如其他人提到的,你的代码不正确,它可能无法正常工作。
答案 2 :(得分:0)
代码中有几个问题,并且对Thread.join
的目的感到困惑。必须在join
的实例上调用Thread
方法。因此,您需要在g
和b
上致电加入。在调用join之前,通常需要以某种方式通知这些线程,您希望它们停止。正如zaske所提到的,join
将等待该线程完成,然后再继续执行调用pauseGame
的线程。