假设我有一堂课叫 MyTask
每次我为 MyTask 新建一个对象时,它都会创建一个线程
boolean mContinueThread = true;
public MyTask (Activity activity) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (mContinueThread) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
});
thread.start();
return null;
};
}.execute();
}
起初我 new myTask1, myTask2, myTask3 然后添加到列表
List<MyTask> myTasks = new ArrayList<MyTask>;
myTasks.add(myTask1);
myTasks.add(myTask2);
myTasks.add(myTask3);
现在应该有3个线程在后台运行,然后我更新了
myTasks = new ArrayList<MyTask>;
看起来 myTask1、myTask2、myTask3 中的那些线程仍在运行,finalize 永远不会被调用。我知道我可以在更新列表之前将每个 MyTask 对象的 mContinueThread 设置为 true,但我想知道有什么方法(回调?)我可以知道那些 MyTask 对象不再在列表中,然后将 mContinueThread 设置为错误的?
public MyTask (Activity activity) {
...
@Override
protected void finalize() throws Throwable {
mContinueThread = false;
super.finalize();
}