본문 바로가기
이과/JAVA 안드로이드

[안드로이드]Thread2

by 코딩초밥 2021. 4. 27.
반응형

안녕하세요 코딩초밥입니다 ㅇㅅㅇ

저번과 이어서 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

댓글