Я создаю много экземпляров вида поверхности для просмотра некоторых объектов, но одновременно создается один экземпляр, а затем вызывается SurfaceDestroyed.но поток, который я создаю каждый раз при создании поверхности, добавляется в основную группу ThreadGroup.
Хотя я прерываю и аннулирую его, но он по-прежнему находится в основной группе потоков и создает исключение нехватки памяти.
КодОтрывки: конструктор
public class MsurfaceView extends SurfaceView implements
SurfaceHolder.Callback {
_thread = new mThread(this);
_thread.setName("mThread");
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (!_thread.isAlive()) {
_thread = new BreedingThread(this);
}
_thread.setRunning(true);
_thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d("mThread", "Surface Destroyed Called");
getHolder().removeCallback(this);
getHolder().addCallback(null);
boolean retry = true;
_thread.setRunning(false);
while (retry) {
try {
_thread.interrupt();
_thread.getThreadGroup().interrupt();
_thread.join();
retry = false;
} catch (InterruptedException e) {
Log.d("mThread", "Interrupted");
// pass interrupt exception
Thread.currentThread().interrupt();
Log.d("mThread", "b4 threadGroupInterrupted");
_thread.getThreadGroup().interrupt();
_thread.getThreadGroup().list();//this shows thread is in //list
_thread = null;
break;
}
}
}
ОБНОВЛЕНИЕ Функция Thread.list показывает, что мой прерванный и нулевой поток все еще находится в группе потоков
06-10 15:22:52.780: INFO/System.out(1814): java.lang.ThreadGroup[name=main,maxPriority=10]
06-10 15:22:52.780: INFO/System.out(1814): Thread[main,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-2,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Binder Thread #1,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Binder Thread #2,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[FlurryAgent,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[AsyncTask #1,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[AsyncTask #2,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-17,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-38,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Timer-2,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-53,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-286,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-327,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-359,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[mThread,5,main]
06-10 15:22:52.780: INFO/System.out(1814): Thread[Thread-409,5,main]
как их удалить?