Android 我的视图组件中的线程:何时停止线程?
我为android创建了一个视图组件。该组件有自己的线程使后台工作。我在视图构造函数中启动线程。 我应该在哪里停止线程?onDetachedFromWindow是一个正确的位置吗?停止方法已被弃用。选中此项:Android 我的视图组件中的线程:何时停止线程?,android,view,Android,View,我为android创建了一个视图组件。该组件有自己的线程使后台工作。我在视图构造函数中启动线程。 我应该在哪里停止线程?onDetachedFromWindow是一个正确的位置吗?停止方法已被弃用。选中此项: 你应该完成你的工作然后离开,Android足够聪明来处理它。停止视图更新的最佳时间可能是视图不再可见的时候。发生这种情况时,将调用活动的onStop方法,从那里可以调用在自定义视图中编写的方法来关闭其更新线程 // Activity.java public void onStop() {
你应该完成你的工作然后离开,Android足够聪明来处理它。停止视图更新的最佳时间可能是视图不再可见的时候。发生这种情况时,将调用活动的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();
}
}
如果在视图具有曲面并用于绘制时线程必须处于活动状态,我将按以下方式执行此操作:
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();
}
}
如果不是线程生命周期不直接依赖于视图表面的绘制,我会考虑在视图中处理它,并且可能会考虑将其移动到使用该视图的活动中。可能是因为在不知道该线程的实际功能的情况下很难确定这一点。
不客气,@user618525!很高兴能提供帮助: