분류 전체보기 46

[INTERVIEW 2주차] MainThread + Handler

UI 처리를 위한 메인 스레드 애플리케이션은 성능을 위해 멀티 스레드를 많이 활용하지만, UI를 업데이트하는데는 단일 스레드 모델(해당 변수나 메서드를 사용하는 시점에는 하나의 스레드만 실행된다.)이 적용된다. 멀티스레드로 UI를 업데이트하면 동일한 UI 자원을 사용할 때 교착상태(deadlock), 경합상태(race condition) 등 여러 문제가 발생할 수 있다. 따라서 UI 업데이트를 메인 스레드에서만 허용한다. 앱 프로세스가 시작되면서 메인스레드가 생성된다. 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버, Application)의 생명주기 메서드와 그 안의 메서드 호출은 기본적으로 메인 스레드에서 실행된다. 메인스레드는 UI를 변경할 수 있는 유일한 스레드이기 때문에 메인 스레드를 UI 스레..

Studying/Android 2023.06.30

[INTERVIEW 2주차] ANR

ANR 안드로이드 앱의 UI 스레드가 너무 오랫동안 차단되면 'ANR(애플리케이션 응답 없음)' 오류가 트리거된다. 앱이 포그라운드에 있으면 그림과 같이 시스템에서 사용자에게 대화상자를 표시한다. 사용자가 ANR 대화상자에서 앱을 강제 종료할 수 있다. 다음 조건 중 하나가 발생하면 앱과 관련한 ANR이 트리거된다. 입력 전달 타임아웃: 앱이 입력 이벤트(예: 키 누름 또는 화면 터치)에 5초 이내에 응답하지 않은 경우이다. 키 이벤트인 볼륨, 메뉴, 백 키의 경우는 눌리고서 5초 이상 지연 시 바로 ANR을 발생시킨다. 참고로 홈 키와 전원 키는 앱과 별개로 동작하고 ANR 발생과는 무관하다. 터치 이벤트는 경우가 다르다. 터치 이벤트도 메인 스레드가 사용 중이라면 대기하는 것은 동일하지만 타임아웃 된..

Studying/Android 2023.06.29

[INTERVIEW 2주차] What is the Intent ?

Intent 인텐트는 메시징 객체로, 다른 앱 구성 요소(컴포넌트) 간에 정보를 주고받을 수 있고, 작업을 요청하는 데 사용할 수 있다. 인텐트가 구성 요소 사이의 통신을 촉진하는 데는 여러 가지 방식이 있지만 기본적인 적용 사례는 크게 세가지로 나눌 수 있다. 액티비티 시작 액티비티의 새 인스턴스를 시작하려면 intent를 startActivity()로 전달하면 된다. intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담는다. 액티비티가 완료되었을 때 결과를 수신하려면, startActivityForResult()를 호출한다. 액티비티는 해당 결과를 이 액티비티의 onActivityResult() 콜백에서 별도의 인텐트 객체로 수신한다. 서비스 시작 안드로이드 5.0(API 21) 이상부터는..

Studying/Android 2023.06.29

[INTERVIEW 1주차] Activity, Fragment LifeCycle

Activity LifeCycle onCreate(): 필수적으로 구현해야하며, 시스템이 Activity를 생성할 때 실행되는 함수이다. 뷰를 구성하고, 데이터 바인딩, ViewModel과 연결하는 등 초기화 작업들을 한다. setContentView()를 이용해 레이아웃을 화면에 띄운다. savedInstanceState라는 매개변수가 있는데, 이 매개변수는 Activity의 이전 상태에 대한 정보가 저장되어 있는 Bundle 객체이다. 처음 생성되었ㄷ면 이 값은 null이다. 연결된 수명 주기 인식 구성요소가 있다면 ON_CREATE 이벤트를 수신한다. - 이 함수는 필수적으로 구현해야한다. - 전체 LifeCycle 동안 "한 번"만 발생한다. - 이 메서드에는 XML, 멤버 변수 정의, 일부 UI..

Studying/Android 2023.06.07

[INTERVIEW 1주차] Activity와 Fragment의 차이점

Activity Activity는 main() 메소드를 사용하여 앱을 실행하는 프로그래밍 패러다임과 다른 안드로이드 시스템의 특수성에 의하여 생긴 개념이다. 모바일 앱은 데스크탑과 다르게 항상 같은 위치에서 시작되는 것이 아니기 때문이다. 앱이 다른 앱을 호출할 때 앱의 전체를 호출하는 것이 아니라 특정 Activity를 호출하는 것이다. 결국 Activity는 앱과 사용자의 상호작용을 위한 진입점 역할과 동시에 하나의 UI 화면을 그리는 Container 역할을 수행한다. - 앱이 UI를 그리는 screen을 제공한다. - 사용자는 Activity를 통해 상호작용 할 수 있다. - 앱의 사용자 인터페이스 주위에 전역 요소를 배치하기에 적합하다. Fragment Fragment는 독립적으로 존재할 수 없..

Studying/Android 2023.06.07

[INTERVIEW 1주차] Android 4대 컴포넌트

Android는 컴포넌트로 구성되어 있다. 그 중 Activity, Service, Broadcast Receiver, Content Provider를 4대 컴포넌트라고 부른다. 4가지의 컴포넌트의 구성요소는 인텐트라는 것을 통해서 상호 통신을 한다. 즉, 다른 구성요소를 호출할 때는 인텐트를 거쳐야한다. - 각 컴포넌트들은 하나의 독립적인 형태로 존재한다. - 각 컴포넌트들은 고유의 기능을 수행한다. - 각 컴포넌트들은 인텐트를 통해 상호작용한다. Activity Activity는 사용자와 상호작용하기 위한 시작점,진입점이다. 즉, 사용자 인터페이스를 포함한 화면 하나 UI를 그리는 창을 제공하고 UI를 담당한다고 생각하면 된다. - intent를 통해 다른 activity를 호출할 수 있다. - 2개..

Studying/Android 2023.06.07

[백준] 2857번: FBI

다섯개의 문자열을 받고, 다섯개의 문자열에 FBI가 포함되어 있는지 contains을 사용한다. 만약 다섯개를 다 확인했는데도 없을 경우에 HE GOT AWAY!를 출력해야하기 때문에 그 부분을 check할 수 있는 장치가 필요하다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String name[] = new String[5]; boolean check = false; for(int i = 0; i < name.length; i ++){ name[i] = s.next(); } for(int i = 0; i< name.length..

Studying/JAVA 2023.05.29

[백준] 2588번: 곱셈

브론즈3 첫째줄의 숫자는 그대로 int로 받고 둘째줄의 숫자는 문자열로 받아서 각각 하나씩 분리하여서 곱셈 계산할 수 있도록 해준다. 1225번에서 사용했던 charAt(i)로 문자열에서 i번째 값을 가져와 char 형태로 변환하고, 문자에서 '0'을 뺴서 숫자가 되도록 해준다. 또한, Integer.parseInt()를 사용해서 문자열을 int 형태로 바꿔줄 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a = s.nextInt(); String b = s.next(); System.out.println(a * (..

Studying/JAVA 2023.05.29

[백준] 2525번: 오븐 시계

브론즈3 입력 받은 시간과 분을 더하여서 총 시간을 생각해준다. 그리고 요리에 걸린 시간을 총시간에 더해준다. 더해진 총시간을 60으로 나누게 된다면 hour가 나오게 된다. 단, 주의해야할 부분은 0~23시 사이기 때문에 초과되었을 경우를 위해 24의 나머지 계산까지 해준다. minute은 더해진 총 시간을 60으로 나눈 나머지이다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a = s.nextInt(); int b = s.nextInt(); int c = s.nextInt(); int time = 60 * a + b; ..

Studying/JAVA 2023.05.29