查看几个 android 示例,我看到了使用 join() 方法暂停线程的趋势:
编辑:请假设 2 个线程已正确定义。 编辑了对 join() 的调用
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;
}
}
- GraphicsViewThread 和 BackendDataViewThread 加入哪个线程?
- 使用 join() 有什么需要? 我不能立即将引用设置为 null 吗?
我怀疑你的代码无法编译,但无论如何 - 我会回答。
这不仅仅是关于Android,而是关于普通的Java。
使用"join"可确保代码等待线程结束。
这不正是你想要的吗?
此外,不要将线程的引用设置为 null。
您无法保证线程的确切结束时间,因此在线程对象结束之前将线程对象设置为 null 是一种不好的做法。
这是一个会合函数,这意味着您引用的线程(例如 GraphicsViewThread)将在该点加入父/主/UI 线程(首先到达那里)。这是实际绘制 UI 的线程。 不能只将引用设置为 null,因为它只是一个引用。该任务仍将在后台运行。
就我使用Android并对其进行分析而言,我已经学会了避免使用线程。使用,AsyncTask或其他类似的容器。它更易于管理。
编辑:我刚刚注意到,正如其他人提到的,您的代码不正确,它可能不起作用。
您在代码中有几个错误,并且对Thread.join
的目的感到困惑。 必须在Thread
的实例上调用join
方法。因此,您需要在g
和b
上调用加入。 在调用 join 之前,通常必须以某种方式通知这些线程您希望它们停止。 正如 zaske 所提到的,join
将等到该线程完成,然后再在调用 pauseGame
的线程中继续执行。