Thread

채현·2023년 2월 24일
0

안드로이드

목록 보기
13/37

👨‍💻 Thread

❕❕ 비동기 작업 (Asynch Task) ❕❕

코드를 읽어서 실행하는 객체
하나의 프로세스가 실행되면 MainThread 존재
Thread 하나는 한 번에 하나의 작업만 가능

Network/DB/음악재생 등 반복되고 오래걸리는 작업이 진행되는 경우, 사용자의 다른 요구에 반응할 수 없음 (5초 안에 응답하지 못하면 운영체제에서 ANR ERROR)

UI작업은 ONLY MainThread만 가능 ✌ (MainThread = UIThread = OriginalThread) --> 다른 Thread를 이용해서 오래 걸리는 작업을 시켜야함

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

MainThread에게 UI변경작업 요청

ⓐ Handler 객체를 이용
Thread -- Handler (Message) --> MainThread (MessageQueue - Looper)

Handler가 MainThread에게 Message를 가져다주면서 UI 작업까지 해줌
MessageQueue에 Message가 왔는지 반복적으로 확인
Handler와 MessageQueue 모두 별도의 Thread!

ⓑ Activity 클래스의 runOnUiThread() 메소드 이용
Runnable 구현 --> UI작업이 가능

📥 네트워크에서 이미지 가져오기

  • Stream이용
    ① URL / Stream
    ② Bitmap 객체

    http: vs https:
    s(secure) 보안! 안드로이드는 https만 가능
    http를 사용하고 싶다면 AndroidMenifest.xml 에서 <application android:usesCleartextTraffic="true"> 작성

  • Library(Glide, Picasso) 이용
    File/Project Structure/Add Library Dependency
    --> com.github.bumptech.glide


🚨 Thread를 사용하면서 주의해야할점

❗❗❗ 화면이 안보인다고 앱이 종료된것이 아니다 ❗❗❗

안드로이드가 버전업되면서 뒤로가기버튼을 눌러도 어플리케이션의 MainActivity는 살아있음 (숨겨놓음)
--> 뒤로가기버튼의 콜백메소드에 finish()로 MainActivity를 죽일 수 있음

//디바이스의 뒤로가기버튼을 눌렀을때 반응하는 콜백메소드
    @Override
    public void onBackPressed() {
        //super.onBackPressed();
        //MainActivity는 뒤로가기를 눌러도 안꺼짐 (숨겨져있음)
        finish();
    }

Activity는 죽어서 MainThread는 죽었지만, Process가 살아서 별도의 Thread가 살아있음
--> Thread가 백그라운드에 Toast를 계속 띄우는중...👀

❗❗❗ 개발자는 Thread의 작업을 그만하도록 해야할 (제대로 제 해야할) 의무가 있다 ❗❗❗

0개의 댓글