我为android创建了一个View组件。该组件有自己的线程来使后台工作。我在View构造函数中启动线程。 我应该在哪里停止线程? onDetachedFromWindow是一个正确的地方吗?
答案 0 :(得分:0)
stop()方法是deprecated
。检查一下:
http://developer.android.com/reference/java/lang/Thread.html#stop%28java.lang.Throwable%29
你应该完成你的工作并离开它,Android足够聪明,可以照顾它......
答案 1 :(得分:0)
停止视图更新的最佳时间可能是它不再可见时。发生这种情况时,将调用您的活动的onStop()方法,然后您可以调用在自定义视图中编写的方法来关闭其更新线程。
// Activity.java
public void onStop() {
myThreadedView.shutdown();
... // rest of onStop() here
}
// ThreadedView.java
public void shutdown() {
myViewThread.shutdown();
}
// ViewThread.java
bool stop = false;
public void shutdown() {
stop = true;
}
public void run() {
while (!stop) {
updateView();
}
}
答案 2 :(得分:0)
我会按以下方式执行此操作,前提是Thread
在View
拥有Surface
期间必须处于活动状态并将其用于绘图:
public class MyView extends View {
class MyThread extends Thread {
private boolean mActive = true;
public void run() {
while (mActive) {
doThings();
}
}
public void terminate() {
mActive = false;
}
private void doThings() {
// the things your thread should do
}
}
private MyThread mBackgroundOperation = null;
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mBackgroundOperation = new MyThread();
mBackgroundOperation.start();
}
protected void onDetachedFromWindow() {
mBackgroundOperation.terminate();
mBackgroundOperation = null;
super.onDetachedFromWindow();
}
}
如果不是这种情况(如果Thread
的生命周期不直接依赖于使用View
的{{1}}进行绘图),我会考虑处理它位于Surface
内,可能会考虑将其移至使用此View
的{{1}}。 “也许”,因为如果不知道Activity
实际上做了什么,这是一件很难确定的事情。