Android/안드로이드 프로그래밍 Next Step7 안드로이드 프로그래밍 Next Step - 5.1 액티비티 생명주기 액티비티 생명주기 1. 생명주기 메서드 호출 사이클 시작할 때 onCreate -> onStart -> onResume 회면 회전할 때 / 시스템에 의해 제거될 때 / Configuration(구성)이 변경될 때 onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume 다른 액티비티가 위에 뜰 때 / 전원 키로 화면 OFF / 홈 키 누를 때 onPause -> onSaveInstanceState -> onStop 백 키로 액티비티 종료 onPause -> onStop -> onDestroy 백 키로 기존 액티비티에 돌아올 때 / 홈으로 갔다가 다시 돌아올 .. 2019. 3. 29. 안드로이드 프로그래밍 Next Step - 3.2 AsyncTask AsyncTask AsyncTask는 백그라운드에서 실행할 작업과 완료 후 UI 변경 작업이 필요할 때, 메서드 구현만으로 각각의 작업 스레드를 신경쓰지 않고 구현할 수 있도록 하기 위해 만들어진 클래스이다. 내부적으로 Handler의 sendMessage() 메서드를 통해 Message를 전달하여 handleMessage() 메서드에서 UI를 갱신하는 방식으로 구현되어있다. 1. 백그라운드 스레드와 UI 스레드를 구분해서 사용하는 방법 Handler의 sendMessage() 메서드를 통해 Message를 전달하고, handleMessage()에서 UI 작업 private final static int BITMAP_MSG = 1; // 메인 스레드에서 생성한 Handler는 메인 Looper를 사용한다.. 2019. 3. 28. 안드로이드 프로그래밍 Next Step - 3.1 HandlerThread HandlerThread Thread 클래스를 상속하고, Looper를 가지며 내부에서 Looper.prepare()와 Looper.loop()를 실행하는 스레드이다. 다른 스레드에서 만들어진 Handler가 이 Looper와 연결이되고, Handler를 통해 전달된 Message는 이 Looper 스레드에서 실행된다. 전달된 Message는 MessageQueue에 들어가서 순차적으로 실행된다. HandlerThread가 돌아가는 스레드를 종료시키려면 외부 스레드에서 Looper.quit()를 실행해야한다. Handler를 Looper에 연결하는 두 가지 방법 Handler를 스레드 내부에서 생성 class LooperThread extends Thread { public Handler handler;.. 2019. 3. 28. 안드로이드 프로그래밍 Next Step - 2.2 ANR(Application Not Responding) ANR (Application Not Responding)메인 스레드에서의 작업 대기 시간이 너무 길어졌을 때 타임아웃이 발생한다. ANR이 발생하면 사용자에게 앱을 종료할 것인지 대기할 것인지 묻는 과정을 거친다. 1. ANR 타임아웃ANR 타임아웃은 시스템이 ANR을 발생시키는 기준이 되는 시간을 의미하며, 젤리빈 이후 브로드캐스트 타임아웃에 변화가 생겼다. 젤리빈 이전- 브로드캐스트 타임아웃 : 10초- 서비스 타임아웃 : 20초- 인풋 디스패칭 타임아웃 : 5초 젤리빈 이후- 브로드캐스트 타임아웃 (FG) : 10초- 브로드캐스트 타임아웃 (BG) : 60초- 서비스 타임아웃 : 20초- 인풋 디스패칭 타임아웃 : 5초젤리빈 이후부터는 특별히 명시를 하지 않으면 브로드캐스트 타임아웃이 1분으로 적.. 2019. 3. 25. 안드로이드 프로그래밍 Next Step - 2.1 메인 스레드와 Handler 메인 스레드와 Handler 1. UI 작업을 메인 스레드에서만 하는 이유안드로이드에서의 UI 작업을 담당하는 메인 스레드(UI 스레드)는 싱글 스레드 모델을 원칙으로한다. 뷰나 뷰그룹이 여러 스레드에 의해 업데이트될 수 있다면 교착 상태(Deadlock)나 경합상태(Race Condition) 등 여러문제가 발생할 수 있다. 교착 상태(데드락, Deadlock)두 스레드 A와 B를 실행하는데 리소스 a와 b가 모두 필요하다고 가정하자. - A는 현재 리소스 a를 사용하고 있고, 다음 작업에서 리소스 b가 필요하다.- B는 현재 리소스 b를 사용하고 있고, 다음 작업에서 리소스 a가 필요하다.위와 같은 상황이라면, A는 B가 종료될 때까지 기다리고 B는 A가 종료될 때까지 기다려야한다.즉, A와 B 모두.. 2019. 3. 24. 안드로이드 프로그래밍 Next Step - 1.3 안드로이드 버전 안드로이드 버전 1. 호환성모드 targetSdkVersion- 앱 실행시 버전체크를 통해 호환성 모드 실행 여부를 결정하는 기준- 해당 API 버전까지는 실행하는데 문제가 없다는 것을 보장함 (해당 버전까지 호환성모드를 사용하지 않음)- 지정하지 않을 경우 디폴트는 minSdkVersion과 동일 minSdkVersion- 해당 앱을 실행하기위해 요구되는 최소 API 버전 compileSdkVersion- 컴파일시 사용하는 android.jar 파일의 버전- 일반적으로 compileSdkVersion >= targetSdkVersion - 디폴트 값이 없으므로 반드시 지정해야한다. 2. Support 패키지의 ~Compat 클래스런타임시 버전 체크를 통해 가능한 한 최신 버전의 기능을 활용하거나, 기존.. 2019. 3. 23. 안드로이드 프로그래밍 Next Step - 1.1 안드로이드 아키텍처 안드로이드 아키텍처 1. Application 기본 앱- 안드로이드에서 제공하는 선탑재 앱 (전화, 문자, 카메라, 브라우저 등)- 시스템 권한 사용이 가능하다.- 프로세스 우선순위를 높일 수 있다. 일반 앱- 사용자가 다운로드하여 설치한 앱- 시스템 권한 사용이 불가능하며, 시스템 서비스에 접근하기 위해서는 Binder IPC를 통한 프로세스간 통신이 필요하다.- 프로세스 우선순위를 높이거나 자신의 생명주기를 제어할 수 없기 때문에 상태변화에 적절히 대응해야 한다. 2. Application Framework액티비티 인스턴스를 생성하고 생명주기 메서드를 호출하거나(Activity Manager) 리소스를 찾아서 제공(Resource Manager), 하드웨어를 제어(Telephony Manager, L.. 2019. 3. 21. 이전 1 다음