상세 컨텐츠

본문 제목

간단한 쓰레드 서비스 실행과 Thread 서비스중지시키기

안드로이드+드론 제작

by 김일국 2015. 2. 26. 20:19

본문

아래 내용중에 안드로이드에서 사용하는 쓰레드 종료방법을 잘 살펴볼 필요가 있습니다.

(자바의 myThread.interrupt(); 와 같은 방식은 작동하지 않습니다.)

/* 메인 액티비티 MainActivity.java 파일 전문 */

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

 

public class MainActivity extends ActionBarActivity {
    Intent myIntent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void startButtonClicked(View v){
        myIntent=new Intent(this, MyService.class);
        startService(myIntent);
    }

    public void stopButtonClicked(View v){
        stopService(myIntent); //stopService 실행시 MyService.java의 onDestroy() 매서드 실행됩니다.
    }

}

============================================================================

/* 마이서비스 MyService.java 파일 전문 */

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

 

public class MyService extends Service implements Runnable {
 /**
  * 디버깅을 위한 태그
  */
 public static final String TAG = "MyService";
 boolean run = true; //myThread 쓰레드 종료를 위한 플래그 최초값 True
 /**
  * 반복 횟수
  */
 private int count = 0;
 Thread myThread;
 /**
  * 서비스 객체 생성 시 자동 호출됩니다.
  */
 public void onCreate() {
  super.onCreate();
  
  // 스레드를 이용해 반복하여 로그를 출력합니다.
  myThread = new Thread(this);
  myThread.start();
 }

 /**
  * 스레드의 실행 부분
  */
 public void run() {
  while(run) { //run 플래그변수 true 일때만 쓰레드 실행 적용
   try {
    Log.i(TAG, "my service called #" + count);
    count++;
    
    Thread.sleep(5000);
   } catch(Exception ex) {
    Log.e(TAG, ex.toString());
   }
  }
  
 }

    @Override
    public void onDestroy(){
        Toast.makeText(this,onDestroy()...",Toast.LENGTH_SHORT).show();
        run=false;//stop버튼 클릭시실행: myThread 쓰레드 종료를 위한 플래그 값.
        super.onDestroy();
    }

 @Override
 public IBinder onBind(Intent arg0) {
  // TODO Auto-generated method stub
  return null;
 }

}

=============================================================================

/* 메인 액티비티 디자인 전문  activity_main.xml */

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="서비스 시작하기"
        android:textSize="24dp"
        android:onClick="startButtonClicked"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/stopButton"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/startButton"
        android:text="서비스 중지하기"
        android:textSize="24dp"
        android:onClick="stopButtonClicked"
        />
   
 <TextView
  android:id="@+id/txtMsg"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_below="@+id/stopButton"
  android:layout_marginTop="40dp"
  android:gravity="center_horizontal"
  android:text="위의 버튼을 누르면 서비스를 시작합니다.\n 실행 후 종료버튼도 사용하세요"
  android:textSize="14dp"
  android:textColor="#ffad6535" />

</RelativeLayout>

========================================================================================

관련글 더보기

댓글 영역