티스토리 뷰
안드로이드 쓰레드 종료를 위해
Thread.stop(), Thread.suspend() 다 해보았지만 모두 deprecated 되어서 사용하면 안될 뿐더러, 정상 동작 하지도 않는다.
그럼 남은건 interrupt() 하나 뿐인데.. 이걸 쓴다고 해서 쓰레드가 바로 종료되는건 아니더라..
보니까 interrupt() 쓴다고 쓰레드가 그냥 죽는게 아니고 쓰레드 내부에 직접 구현을 해줘야 했다.
중복 쓰레드 실행 시 이전 쓰레드를 죽이는 것도 처음에 boolean 변수 만들어서 죽여주는 그런 방법으로 시도했다가, interrupt()와 interrupted()를 활용 하는 것이 훨씬 간결 하다는 것을 알았다.
구현 소스는 다음과 같다.
public class ThreadKillDemo extends Activity { private int i = 0; Thread threadTest; @Override public void onStop(){ super.onStop(); if(threadTest != null && threadTest.isAlive()) threadTest.interrupt(); } @Override public void onResume(){ super.onResume(); i = 0; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnTest = (Button)findViewById(R.id.btn_thread_start); btnTest.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(threadTest != null && threadTest.isAlive()) //반드시 null검사를 선행해야 한다. ※앞의 값이 false면 후행 검사는 하지 않는다. threadTest.interrupt(); //Thread를 interrupt 한다. i++; threadTest = new Thread(new Runnable() { @SuppressWarnings("static-access") public void run() { int j = i; while(!threadTest.interrupted()){ //interrupted 부분을 구현해준다. interrupt 호출 시 interrupted는 true 반환. SystemClock.sleep(1); Log.i("THREADKILL","WORKING "+j); } } }); threadTest.start(); } }); Button btnNext = (Button)findViewById(R.id.btn_next); btnNext.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent i = new Intent(ThreadKillDemo.this, ActivityTest.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); } }); } }
p.s) interrupt 쓰는 순간 바로 스레드를 죽여보고 싶은데 그건 아무래도 힘들것 같고 적어도 루프 한번은 돌아야 죽일 수 있는 것 같다;;p.s2) 예제에서는 다른 액티비티로 넘어갈 때 쓰레드를 죽이기 위하여 이런 식으로 구현 하였다.
'Development > Mobile' 카테고리의 다른 글
[Android] Service에서 Dialog 띄우기 (0) | 2010.11.11 |
---|---|
[Android] 메모리를 해제 후에 돌아왔더니 (0) | 2010.10.31 |
[Android] ArrayIndexOutOfBoundsException on getIndexToDraw (0) | 2010.10.23 |
[Android] MapActivity에서 Touch Event 사용하기 (0) | 2010.10.19 |
[Android/JAVA] How do I convert InputStream to String? (0) | 2010.10.10 |
[Android] 배포용 keystore 제작 및 싸인 하기(구글맵 쓰는 경우 포함) (9) | 2010.10.01 |
[Android] 폰 부팅시 어플리케이션 실행 (3) | 2010.09.30 |
[Android] 한글 초성 검색 (27) | 2010.09.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- linux
- gcc
- 리눅스
- Troubleshooting
- 안드로이드
- API
- MFC
- Python
- java
- it
- db
- C++
- algorithm
- Quiz
- driver
- source
- C
- jni강좌
- database
- AWS
- 프로그래밍
- 음악
- Visual C++
- kering
- 드라이버
- winapi
- android
- NDK
- jni
- Cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함