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

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

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

일을할때 한가지의 일이 주어진다면 하나의 일을 하면 되지만

일이 수없이 떨어졌을떄는 당연히 느려질수밖에 없죠

하지만 내 일을 동시에 도와주는 녀석이 있다면 어떨까요? 더욱 빨라지겠죠?

안드로이드에도 그런 녀석이 있는데요

바로 thread 입니다.

오늘은 간단히 thread의 기능을 써보면서 소개해보도록하겠습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="오래걸리는 작업(Thread 미사용)- ANR에러"
        android:onClick="clickBtn"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="BUTTON"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="오래걸리는 작업(Thread 사용)"
        android:onClick="clickBtn2"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="0"
        android:gravity="center"
        android:textSize="30sp"
        android:textStyle="bold"/>


</LinearLayout>

ui는 이렇게만 준비해 놓고 시작해볼께요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

메인에는 tv까지 초기화를 시켜놓고

버튼에 기능을 추가해보겠습니다

Thread를 사용하지않은 그냥 버튼의 값입니다.

안에 thread의 sleep은 thread를 공식적으로 쓴것이아니라

컴퓨터가 너무 빠르기에 값이 바로 나와버려서 차이점을 보여주기위해 사용한것입니다.

자 thread를 제대로 써볼까요?

thread는 바로 쓰는 것이 아니라 thread를 상속받은 thread class를 따로!!!

만들어서 쓰는것입니다.

뜬금없이 배를 띄워서 물고기를 잡으러 간다고 예를 든다면.

내가 물고기를 잡고 회치고 매운탕끓이고 이것저것 할때

내가 고용한 쓰레드 아저씨는 무조건 노 만 져어주세요 하는거와 같다

내가 노를 안젓고 다른일을할때

쓰레드아저씨는 그것만 해줘도 충분히 도움이 되니까

저렇게 쓰레드 안에 코딩을 해놓는 것이 "노 만 져어주세요~"하는 것과 같다.

이해안간다면..그냥 쓰레드는 따로 일처리를 하는 녀석이구나 생각하면 된다

결과값을 보자.

Thread를 쓰지않은 버튼은 렉이걸렸다가

결과가 된값! 을보여주고

Thread를 쓴 버튼은

결과가 되는 과정을 값을 보여주게된다.

여기서 우리가 알수있는점은

thread를 써야 우리가 많은 작업을 실행시킬떄

동시에 작동시키는 일이 많다는 것이다.

이 계념을 비동기 방식이라고 일컷는다

반응형

'이과 > JAVA 안드로이드' 카테고리의 다른 글

[안드로이드]ViewPaPer  (0) 2021.04.30
[안드로이드]UI/UX 디자인이란?  (0) 2021.04.27
[안드로이드]Thread2  (0) 2021.04.27
[안드로이드]CompoundButton 활용  (2) 2021.04.25
[안드로이드]Room  (1) 2021.04.25

+ Recent posts