❕❕ 비동기 작업 (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.
ⓐ 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
❗❗❗ 화면이 안보인다고 앱이 종료된것이 아니다 ❗❗❗
안드로이드가 버전업되면서 뒤로가기버튼을 눌러도 어플리케이션의 MainActivity는 살아있음 (숨겨놓음)
--> 뒤로가기버튼의 콜백메소드에 finish()
로 MainActivity를 죽일 수 있음
//디바이스의 뒤로가기버튼을 눌렀을때 반응하는 콜백메소드
@Override
public void onBackPressed() {
//super.onBackPressed();
//MainActivity는 뒤로가기를 눌러도 안꺼짐 (숨겨져있음)
finish();
}
Activity는 죽어서 MainThread는 죽었지만, Process가 살아서 별도의 Thread가 살아있음
--> Thread가 백그라운드에 Toast를 계속 띄우는중...👀
❗❗❗ ∴ 개발자는 Thread의 작업을 그만하도록 해야할 (제대로 제 해야할) 의무가 있다 ❗❗❗