반응형
안녕하세요 코딩초밥입니다 ㅇㅅㅇ
저번과 이어서 thread의 쓰임새를 더욱 알아보겠습니다
MainThread가 일처리를 하고있을때
소요시간이 필요한 부분을 따로 실행하게 해주는것이 Thread 이며
그 계념을 비동기 처리 방식이라고 한다고 까지 배웠습니다
오늘또한 thread를 이용하여 엑티비티가 꺼지더라도 계속 실행되는
thread를 만들어보겠습니다
어떻게 엑티비티가 꺼져도 지속되냐구요?
그걸 알아봅시다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="현재시간 출력"
android:onClick="clickBtn"/>
</RelativeLayout>
간단한 ui를 만든후
현재시간이 toast로 나오는데 엑티비티를 꺼지더라도 toast가 계속 나오게 해보겠습니다.
onDestroy에 stopTread를 가져왔습니다
이뜻은 말그대로 이 어플이 꺼졌었을때만 stop한다는 이야기입니다
이렇게 별도의 Tread를 만들어서 while 문을 true로 한다면 그 Tread는 계속 발동 된다는 뜻이다.
제가 말씀드리고싶은건 토스트를 계속 나타내게 하여서
토스트 구워 드시라는게 아니고
"Thread를 지속문으로 계속 발동하게 해 놓는다면 MainThread와 별도로 계속 지속할수 있다는 이야기입니다.
이것이 객체지향의 특징이자 장점입니다"
풀코드
package com.kim9212.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
MyThread t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onDestroy() {
t.stopThread();
super.onDestroy();
}
public void clickBtn(View view) {
t= new MyThread();
t.start();
}
class MyThread extends Thread{
boolean isRun= true;
@Override
public void run() {
while ( isRun ){
//현재시간 출력
Date now= new Date();//객체가 생성될때의 시간을 가지고 있음
final String s= now.toString(); //현재시간을 문자열로 리턴해줌
//화면변경작업은 별도 Thread가 할 수 없음.
runOnUiThread(new Runnable() {
@Override
public void run() {
//이 안에서는 UI작업 가능
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
});
//5초동안 잠시 대기
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}//while..
}//run method..
//스레드를 종료하는 기능 메소드
void stopThread(){
isRun= false;
}
}
}
반응형
'이과 > JAVA 안드로이드' 카테고리의 다른 글
[안드로이드]ViewPaPer (0) | 2021.04.30 |
---|---|
[안드로이드]UI/UX 디자인이란? (0) | 2021.04.27 |
[안드로이드]Thread (0) | 2021.04.26 |
[안드로이드]CompoundButton 활용 (2) | 2021.04.25 |
[안드로이드]Room (1) | 2021.04.25 |
댓글