아래 내용중에 안드로이드에서 사용하는 쓰레드 종료방법을 잘 살펴볼 필요가 있습니다.
(자바의 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>
========================================================================================
안드로이드 액티비티 전체화면으로 보기(타이틀바까지 숨기기) (0) | 2015.03.25 |
---|---|
안드로이드 프로젝트 복사하기 (0) | 2015.03.15 |
안드로이드와 PHP연동하기(HttpURLConnection오브젝트사용) (0) | 2015.01.23 |
안드로이드에서 패키지명의 의미 (0) | 2015.01.20 |
안드로이드 스튜디오1.01 Default Activity Not Found 메세지문제는 (0) | 2015.01.19 |
댓글 영역