안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
질문드릴 내용은 thread 관련 내용입니다.
thread를 사용하는 어플리케이션 개발중입니다.
stop을 사용할수 없는 thread,,, 보통 flag로 제어를 한다고 얘기를 들어서,,
flag제어를 했습니다... 원하는 기능은 구현이 되는데요,,
thread가 꺼지는건 당연히 아니고(표현이 맞을지 모르겠네요,, 아직 thread에 대해서 완벽히 이해한게 아니라,,)
flag가 true값일때만 run메소드 안의 내용이 돌아가는,, 뭐 그렇게 구현이 되어있습니다.
그런데 문제는,, 어플리케이션이 종료 되어도 이놈의 thread는 살아있다는거죠,,, 이 어플리케이션을 다시 시작하기 전까지,,
또 다른 문제점은,,
thread 는 두번째 activity에 들어가있습니다.
뒤로가기를 눌렀다가 다시 두번째 activity로 가면,,, 또다른 thread가 생성이 되죠,,
계속 생기더군요,, 이러한 문제는 어떻게 해결해야하나요,,,훔,,,
초보인지라,, 질문을 잘쓴건지도 모르겠네요,,,
1. thread 종료하는법,,
2. thread 계속 생성되는거,,,
답변좀 꼭 부탁드리겠습니다... 수고하세요 ^^
2011.04.11 11:03:01
인터럽트를 걸어 종료시키는 방법이 있습니다. isInterrupted()쪽 찾아보세요.
종료시키는 법을 아시게 되면 2번문제는 자동으로 해결될거로 보이네요.
2011.04.12 11:53:44
declare부분은 아래처럼
private SomeHandler handler ; // Handler를 상속 받는 Class를 정의하세요
private Worker worker;
worker = new Worker("worker");
handler = new SomeHandler(worker.getLooper());
아래는 worker thread
private static class Worker implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
Worker(String name) {
Thread t = new Thread(null, this, name);
t.setPriority(Thread.MIN_PRIORITY);
t.start();
synchronized (mLock) {
while (mLooper == null) {
try {
mLock.wait();
} catch (InterruptedException ex) {
}
}
}
}
public Looper getLooper() {
return mLooper;
}
public void run() {
synchronized (mLock) {
Looper.prepare();
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();
}
public void quit() {
mLooper.quit();
}
}
종료하실때마다 quit를 호출하시면 될 것 같네요
테스트 해보지는 못했지만 돌아는 갈듯.
private SomeHandler handler ; // Handler를 상속 받는 Class를 정의하세요
private Worker worker;
worker = new Worker("worker");
handler = new SomeHandler(worker.getLooper());
아래는 worker thread
private static class Worker implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
Worker(String name) {
Thread t = new Thread(null, this, name);
t.setPriority(Thread.MIN_PRIORITY);
t.start();
synchronized (mLock) {
while (mLooper == null) {
try {
mLock.wait();
} catch (InterruptedException ex) {
}
}
}
}
public Looper getLooper() {
return mLooper;
}
public void run() {
synchronized (mLock) {
Looper.prepare();
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();
}
public void quit() {
mLooper.quit();
}
}
종료하실때마다 quit를 호출하시면 될 것 같네요
테스트 해보지는 못했지만 돌아는 갈듯.



