Receiver ? 안드로이드의 4대 컴포넌트중 하나로 그 중에서 가장 간단하다. 안드로이드 시스템에서 벌어지는 일중에 앱이 알아야하는 상황이 발생하면 BroadCast(방송)가 뿌려지는데 특정 앱에서 이 BroadCast를 받아들이고 그에대한 동작(액션)을 수행하는 역할을 하는 컴포넌트가 바로 Receiver 이다. 특히 이런 BroadCast를 수신하기 위해 사용되는 Receiver를 Broadcast Receiver 라고 부른다. 리시버는 크게 정적리시버, 동적리시버로 구분된다. 정적리시버. 리시버 클래스를 별도로 생성하고 그에대한 내용을 정의해둔다. 그렇기 때문에 정적리시버를 한번 등록하면 해제할 수 없다. public void onClick(View v) { Intent intent = new ..
액티비티의 생명주기란 액티비티의 상태를 몇개로 분류하고, 그 상태에 따라서 대처할수있는 함수를 제공하는 것을 뜻한다. 우리가 그간 사용해왔던 onCreate 함수가 액티비티 생명주기함수중에 대표적인 함수이다. 이렇게 액티비티 생명주기 함수를 사용해 프로그래밍 하는 이유는 전화, 화면 회전 등 다양한 상황에서 Application을 정상적으로 동작시키기 위함이다. onCreate → onStart → onResume → 동작 (필요한 객체들을 할당) 동작 → onPause → onStop → onDestroy (JVM에 의해 해제) 추가로 onRestart가 있는데 onStop 상태에서 onStart로 가는 중간과정이 되겠다. 상황별 생명주기 함수 호출 루틴 1...
Bundle ? 우리가 여러가지 데이터들을 한번에 처리하기위해서 클래스를 만들고, 해당 클래스의 객체에 데이터들을 담고, 직렬화를 하기위해서 Serializable이나 Parcelable까지 구현을 해주고, 그리고 추가로 이 클래스가 데이터를 받는쪽에도 존재해야 한다. 이런 과정이 매우매우매우 번거롭기 때문에 등장한 녀석이라고 생각한다. (나는...) Bundle은 하나의 클래스이며, 우선 내장된 클래스기 때문에 데이터를 받는쪽에 해당 클래스를 전달해줘야되는 번거로움이 사라진다. 그리고 기본적으로 Serializable과 Parcelable이 구현되어 있어서 언제든지 자유롭게 직렬화를 할 수 있다. 그리고 Map의 형태로 데이터를 집어넣을수 있기 때문에 원하는데이터를 원하는만큼 저장할 수 있다 추가로 기..
Intent에 의미를 부여하는 여섯 가지 정보이다. (위 정보들이 Intent에 저장되어 전달될 수 있고, 이러한 정보들에 따라서 해당 Intent에 의미가 부여된다는 의미이다.) 인텐트 정보의 주 목적은 특정 컴포넌트에 대한 실행 정보를 넣어서 해당 컴포넌트를 실행하고, 실행되는 컴포넌트에 원하는 데이터를 전달하는 것이다. 명시적 인텐트 → 실행할 액티비티 컴포넌트를 정확하게 명시하는 것. ( Package와 Class명을 정확하게 명시하는 것이다. ) * 명시적 인텐트는 보안상 자기 패키지 내부의 액티비티를 실행할 때만 사용한다. 즉, 내가 직접만든 액티비티 등의 컴포넌트로 전환할 때 사용한다는 말이다. ( 추가로 외부에서 우리앱을 실행하지 못하도록 막아줘야한다. ) → android:exported..
액티비티 ? 안드로이드의 4대 Component로 그냥 단순하게 눈에보이는 화면이라고 생각하면된다. 하나의 Application 에서 하나의 Activity만 사용하는 것이 아니다. (화면 전환 가능) 이 때 하나의 액티비티 A에서 액티비티 B로 넘어갈 때 데이터를 전달해주는 역할을 하는 것이 인텐트이다. 어떻게 A Activity가 B Package명과 B Activity명만으로 B Activity를 실행시킬 수 있는가? - 시스템 서비스인 Package Manager, Activity Manager 를 사용하기 때문에 가능하다. Package Manager : App을 설치, 삭제를 담당한다. 또한 설치된 모든 Package 정보를 수집한다. (AndroidManifest.xml 파일의 내용을 기반으..
기본적으로 핸드폰에 발생하는 이벤트는 대부분 터치이벤트이다. 터치이벤트가 발생하면 어떤 과정을 통해서 어떤 View에서 발생한 이벤트인지 찾고 그에 해당되는 이벤트가 발생되는지 아래 과정을 통해 간단하게 소개하겠다. 터치된 영역의 최상위 루트뷰부터 하위로 dispatchEvent를 호출하며 찾아가고, onTouchEvent를 호출하면서 해당 View에 대한 이벤트인지 확인한다. 해당 View에 대한 이벤트라면 반환값이 TRUE이 되고, 아니라면 FALSE를 반환해 다음 View로 넘어간다. ( 당연히 TRUE가 반환되게 되면 그에 해당하는 이벤트 효과가 발생된다. ) public boolean dispatchTouhEvent(MotionEvent e); public boolean onTouchEvent(..