ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드 4대 컴포넌트
    Security/Mobile 2019.05.15 22:34

    안드로이드 4대 컴포넌트(구성요소)

    - 각 컴포넌트는 하나의 독립된 형태로 존재

    - 각각의 컴포넌트는 인텐트를 통해 상호 통신함 (즉, 액티비티에서 다른 컴포넌트 호출시 인텐트를 거쳐야 함)

    안드로이드 4대 컴포넌트
    안드로이드 4대 컴포넌트

    Activity

    - 사용자가 어플리케이션과 상호작용하는 단일 화면

    - UI(User Interface) 화면을 가지며 특정한 작업을 담당하는 컴포넌트

    - UI 화면을 담당하는 컴포넌트

    - 자바소스에서 Activity클래스를 상속해야 하며 액티비티가 기본적으로 가지고 있는 생명주기 메소드를 재정의하여 원하는 기능을 구현하는 방식으로 제작함 (일반적으로 하위호환을 위해 AppCompatActivity 서브클래스를 사용)

    - 가장 많이 쓰이는 컴포넌트

    - 안드로이드 어플리케이션은 반드시 하나이상의 엑티비티를 가지고 있어야 함

    - 두개의 액티비티를 동시에 Display할 수 없음

    - 다른 어플리케이션의 액티비티도 불러낼 수 있음

    - 각종 버튼, 레이블, 테이블 등등의 View 혹은 UI를 배치할 수 있음

    - 액티비티 내에 Fragment를 추가하여 화면을 분할시킬 수 있음

    - 하나 이상의 View를 가질 수 있음(모든 View들이 배치되는 곳이 액티비티)

    - View와 VuewGroup을 가지고 사용자에게 UI를 제공함

    - 각 엑티비티는 매니페스트 파일에 등록되어 있어야 함

    - 엑티비티들과 서비스들은 UI 스레드라고 불리는 동일한 애플리케이션 스레드로 실행됨

     

    EX) 계산기 앱

    엑티비티에 숫자 버튼, 연산 버튼, 연산의 결과를 보여줄 레이블 등이 배치

     

    EX) 이메일 앱

    새 이메일 목록을 표시하는 액티비티가 하나 있고, 이메일을 작성하는 액티비티가 또 하나, 그리고 이메일을 읽는 데 쓰는 액티비티가 또 하나 있을 수 있습니다. 여러 액티비티가 함께 작동하여 해당 이메일 앱에서 짜임새 있는 사용자 환경을 형성하는 것은 사실이지만, 각자 서로와는 독립적인 형태입니다. 따라서, 다른 앱이 이와 같은 액티비티 중 어느 것이라도 하나만 시작할 수 있습니다(이메일 앱이 그렇게 하도록 허용하는 경우). 예를 들어, 카메라 앱이라면 이메일 앱 안의 액티비티를 시작하여 새 메일을 작성하도록 해서 사용자가 사진을 공유하도록 할 수 있습니다.

     

    Activity Instance

    - 사용자가 화면 옮겨 다닐때 액티비티 인스턴스는 스택을 형성함

    - 새로운 화면으로 이동하면 액티비티를 스택에 push하고 이전화면으로 돌아가면 해당 액티비티를 pop하기 때문에 응용 프로그램의 액티비티 상태는 응용프로그램의 종료 가능성과 시스템 우선순위에 영향을 미침

    - 액티비티의 생명주기는 뒤로 가기 버튼을 눌러 사용자가 뒤로 이동하거나 액티비티가 명시적으로 finish()함수를 호출했을때 종료됨

     

    Rayout

    - 사용자가 엑티비티를 통해 상호작용하기 위해 나타나는 형식

     

    EX) 키보드

    엑티비티는 키보드, 레이아웃은 키보드의 형식 즉, 두벌식 자판 등 키보드의 모양

     

    Fragment

    - 엑티비티 내에서 독자적으로 동작할 수 있는 UI 컴포넌트

    - 안드로이드 3.0(API Level 11)부터는 프래그먼트가 추가됨

    - 프래그먼트는 안드로이드 뷰도 아니고 4대 구성요소로 보기에도 어려움

    - 안드로이드 3.0부터는 매우 활용도가 높음

    - 프래그먼트로 할 수 있는 것은 액티비티로 모두 대체가 가능함

    - 간단한 UI의 경우 소스코드가 많이 길어지는 단점이 있음

    - 약간의 소스코드를 통해 장기적인 유지보수에 이득을 가져옴

     

    Activity 생명주기

    - 사용자는 하나의 액티비티를 보다가 다른 액티비티로 전환을 해야 하며 여러 액티비티를 동시에 볼 수 없기 때문에 한정적인 스마트폰의 자원을 최대한 효율적으로 활용하기 위해 액티비티는 생명주기를 가짐

    - 엑티비티 생명주기를 관리하는 주된 목적은 적시에 엑티비티 상태(엑티비티가 현재 보존하고 있는 데이터와 현재 보이는 사용자 인터페이스 데이터(화면에 나타난 뷰 객체의 데이터))를 저장하거나 복원하기 위함

     

    영속적 상태

    - 데이터베이스, 콘텐트 제공자, 파일 등에 저장될 필요가 있는 메모리의 데이터

     

    영속적 상태를 저장하는 목적

    데이터 유실을 막기위함(엑티비티가 백그라운드 상태로 있을 때는 런타임 시스템이 그 엑티비티를 종료시키면서 엑티비티의 데이터가 없어질 수 있음)

     

    동적 상태

    - 화면에 보이는 사용자 인터페이스(인스턴스 상태)

    - 애플리케이션이 실행되는 동안만 보존

    - 화면의 텍스트 필드에 입력된 텍스트는 아직 애플리케이션의 영속적 상태 데이터로 확정되지 않은 것임

    - 파일이나 데이터베이스 등에는 저장하지 않지만 액티비티 내부에서 보존해야 하는 변수

     

    동적 상태를 저장하는 목적

    -  텍스트 필드, 라디오 버튼 등에 입력하고 변경 사항을 저장하기 전 사용자가 다른 엑티비티로 전환한다면, 전 엑티비티는 엑티비티 스택으로 들어가고 백그라운드 상태가 되고, 이후 장치의 메모리가 부족해져 런타임 시스템이 부족한 리소스를 보충하기 위해 전 엑티비티를 종결시킴(kill). 그러나 사용자는 전 엑티비티가 그냥 백그라운드에 있다가 언제든지 포그라운드로 올 준비가 되어있다고 생각함.(즉, 자신이 입력했던 텍스트와 선택한 라디오 버튼들이 그대로 남아 있을거라고 생각함). 그러나 전 액티비티의 새로운 인스턴스가 생성되므로 동적 상태 데이터가 저장되어 복원되지 않았다면 이전에 입력한 데이터는 유실됨.

    - 안드로이드 장치의 구성이 변경되는 경우에도 그 엑티비티의 인스턴스를 새로생성함(변경한 상황에 맞게 엑티비티를 다시 구성해야 하기 때문)

    EX) 장치를 세웠다 눕히면 그때마다 장치의 구성이 변경되므로 현재 화면에 있는 엑티비티의 인스턴스를 소멸시키고 새로운 인스턴스를 생성

    따라서, 동적 상태를 저장하는 것의 주 목적은 포그라운드와 백그라운드 엑티비티들 간의 매끄러운 전환을 제공하기 위함

     

    엑티비티의 생명주기(C-S-R-P-S-D)

    Activity 생명주기 메소드

    - Activity 클래스는 생명주기 메서드를 많이 갖고 있으며, 그 메서드들은 엑티비티의 상태가 변경될때 이벤트 처리기(event handler)처럼 동작

    - 생명주기 메서드란 엑티비티의 상태가 변경된다는 것을 그 엑티비티에게 알려주기 위해 안드로이드 런타임이 자동으로 호출하는 메서드를 의미

     

    onCreate()

    - 액티비티가 만들어지고 나서 최초에 실행될 때 호출됩니다.[한번만 호출됨.]

    - 액티비티에 필요한 리소스들을 초기화하거나 화면에 보이는 View들의 일반적인 상태들을 여기서 설정합니다.

    - 이전 상태가 저장되어 있을 경우, 번들 객체를 참조하여 이전 상태로 복원이 가능합니다.

    - 이 다음에는 항상 onStart()가 호출됩니다.

     

    onStart()

    - 액티비티가 화면에 보이기 바로 전에 호출됩니다.

    - 액티비티가 화면상에 보이면 이 메소드 다음에 onResume()메소드가 호출된 것입니다.

    - 매우 빠르게 끝나고, onResume() 단계로 넘어갑니다.

    - 보통 Broadcast Receiver는 이 단계에서 등록하는 것이 좋습니다.

    - 액티비티가 시작되기 전에 호출되는 함수 / 액티비티가 멈춘 후 다시 시작되기 전에 호출되는 함수

     

    onResume()

    - 액티비티가 사용자와 상호 작용하기 바로 직전에 호출되는 함수입니다. 이 메소드가 호출되고 나서 바로 액티비티가 사용자에게 보이기 시작합니다.

    - 액티비티가 화면에 보여집니다.

    - 사용자에게 focus를 잡은 상태입니다.

     

    onRestart()

    - 액티비티가 중지된(Stopped) 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출됩니다.

    - 액티비티가 멈춰 있다가 다시 다시 호출될 때 불리는 함수입니다.

     

    다른 액티비티가 호출되는 경우

    onPause()

    - 액티비티 위에 액티비티가 올라와서 focus를 잃었을 때 호출되는 함수

    - 액티비티가 완전히 가려지지 않고 부분만 가려진 상태에서 호출되는 함수, 즉 일부분이 보이거나 투명상태일 경우에 호출됩니다.

    - 다른 액티비티가 호출되기 전에 실행되기 때문에 onPause() 함수에서 시간이 많이 소요되는 작업이나 많은 일을 처리하면 다른 액티비티가 호출되는 시간이 지연되기 때문에 많은 일을 처리하지 않도록 주의합니다.

    [ex) A 액티비티에서 B 액티비티를 호출하는 경우, A 액티비티의 onPause() 함수가 먼저 호출되고 나서 B 액티비티가 실행되는 흐름이다.]

    - 영구적인 Data는 여기서 저장합니다.

    - 이 메소드가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 빠르게 리턴되어야 합니다.

    - 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있습니다.

     

    onStop()

    - 액티비티 위에 다른 액티비티가 완전히 올라와 100% 가려질 때 호출되는 함수

    - 액티비티가 사용자에게 더 이상 보이지 않을 때 호출되는 함수

    - 만약 이 상태에서 액티비티가 다시 불려지면 onRestart()함수가 호출됩니다.

    - 시스템이 onStop() 상태에 들어오면, onSaveInstanceState()이라는 메소드를 호출하는데, 이 단계에서는 key-value 형태로 값을 저장할 수 있고, 이 값을 onCreate()에서 복원할 수 있습니다.

    - ex) 홈 키를 누른 경우, 또는 다른 액티비티 페이지로 이동이 있는 경우에 호출됩니다.

     

    onDestroy()

    - 액티비티가 완전히 스택에서 없어질 때 호출되는 함수

    - 즉 제거되는 경우입니다.

    - Finish() 메소드가 호출되거나 시스템 메모리 확보를 위해서 시스템이 강제로 종료시키는 경우에 호출될 수 있습니다.

     

    참고 사항

    - onStop(), onDestroy() 함수는 호출되지 않을 수도 있습니다.

    - 메모리 부족으로 인해 onStop()이 호출되지 않을 수 있습니다.

     

    Q & A

    Q. 앱을 사용하는 도중에 카카오톡 메시지가 온다면 사용하던 앱의 TopActivity의 생명주기는 어떤 상태가 되나?

    A. onPause()

     

    Q. 데이터를 불러오는 작업은 어디서 해야 하나?

    A. onCreate()

     

    Q. 다른 액티비티가 상단에 올라오면 어떤 상태인가?

    A. 실행 중이던 액티비티는 onPause() -> onStop()

     

    Q. onRestart()는 언제 호출되는가?

    A. 다른 액티비티 밑에 깔려 있어서 onStop() 상태에 있다가 다시 돌아오면 호출된다.

     

    Q. 화면이 회전하면 액티비티 생명주기는?

    A. onPause() -> onStop() -> onCreate() -> onStart() -> onResume()
    현재 액티비티를 destroy하고 새로 생성하기 때문에 기존 데이터를 유지하기 위해서는 onSaveInstanceState()에서 Bundle에 데이터를 저장하도록 오버라이드 해야 한다.

     

    Q. A 액티비티에서 B 액티비티를 실행할 경우 생명주기는?

    A. A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop() : B는 사용자에게 보여짐.

     

    화면을 실행 했을 경우 : C - S - R

    뒤로 버튼을 눌러 화면에서 없앨 경우 : P - S - D

    홈 버튼을 눌러 화면을 닫았을 경우 : P - S               

     (에뮬레이터에서는 개발자옵션에서 '액티비티 유지 안함' 옵션을 설정하면 홈 버튼을 눌러도 2번과 같이 종료됨, 실제 장치는 Dev 도구 설치를 해야 사용가능)

    3번 이후 recent 버튼을 눌러 다시 앱으로 돌아갈 경우 : S - R

    화면을 회전했을 경우 : 2번 + 1번 (P - S - D - C - S - R)

     

     

    Service

    서비스

    - 백그라운드에서 실행되는 프로세스(PC에서의 백그라운드 데몬과 동일한 역할)

    - 화면(UI, 사용자 인터페이스)이 존재하지 않음

    - 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할 때 사용

    모든 서비스는 Service클래스를 상속받아서 사용함

    - 새로 만든 후에는 항상 매니페스트에 등록을 해주어야 함

    - 메인 액티비티에서 서비스를 시작하고 싶은 경우에는 startService()라는 메서드를 이용해 서비스를 실행시킬 수 있음

    - 한번 시작된 서비스는 애플리케이션이 종료되고 다른 애플리케이션으로 이동해도 계속 백그라운드에서 실행됨

    - 사용자와 엑티비티 사이의 상호작용을 차단하지 않고 네트워크를 통하여 데이터를 꺼내올 수 있음

    - UI가 동작하는 Main Thread에서 동작하기 때문에 Service 내에서 별도의 Thread를 생성하여 작업을 수행해야 함

    - 서비스를 가지고 있는 앱은 단말 메모리 부족시 잘 죽지 않음

    - 엑티비티들과 서비스들은 UI 스레드라고 불리는 동일한 애플리케이션 스레드로 실행됨

     

    EX) 음악(+안드로이드 사용량 모니터링, 주기적으로 특정 웹사이트에서 데이터를 읽어오는 것)

    앱 키고 노래 켠다음에 앱 종료하지만 음악은 계속 흘러 나옴 - 엑티비티는 종료되지만 서비스는 백그라운드에서 여전히 구동

     

    Service 생명주기

    서비스의 생명주기(시작타입, 연결타입)

    Servcie 생명주기 메소드

    시작타입(타입 A)

    - 서비스 스스로가 stopSelf()를 호출하거나 다른 컴포넌트가 stopService()를 호출할 때까지 서비스가 계속 실행됨
    - 한 프로세스안에서 컴포넌트 사이에 유기적인 역할함

    - 로컬 서비스를 구현하는 것


    onCreate()

    서비스가 생성될 때 호출

     

    onStart()

    startService() 메소드에 의해 서비스가 시작될 때마다 호출

     

    onDestory()

    서비스가 종료될 때 호출

     

    연결타입(타입 B)

    - 같은 기기에서 실행되고 있는 다른 애플리케이션에서 원격 서비스로 구현된 서비스를 실행할 수 있게 됨

    - 여러 프로세스 간에 유기적인 역할

    - Service에게 컴포넌트가 연결을 하면 컴포넌트가 클라이언트 서버가 Service가 됨

      이제 컴포넌트가 Service에게 요청을 하면 Service는 그에맞는 결과값을 리턴함. 클라이언트가 연결을 해제하고, 

      더 이상 Service와 연결된 클라이언트가 없다면 Service는 자연스럽게 종료됨

    - 앱 내부의 기능을 외부로 제공할 때 사용

    - 하나 이상의 컴포넌트가 bindService()를 호출해서 서비스를 시작했다면 서비스는 모든 연결된 컴포넌트가 연결    을 해제하면 서비스는 소멸됩니다.

     

    onCreate()

    서비스가 생성될 때 호출


    onBind()

    bindService() 메소드에 의해 서비스가 시작될 때 호출


    onUnbind()

    서비스와 연결이 끊겼을 때 호출


    onDestory()

    서비스가 종료될 때 호출

     

    참고

    - 서비스가 실행 중이 아니라면 안드로이드가 서비스를 실행 한 후 그 서비스의 onCreate() 와 onStartCommand()를 차례로 호출

    - 서비스가 실행 중이었다면 onStartCommand()만 호출

    - 서비스는 액티비티가 없기 때문에 onResume(), onPause(), onStop() 는 호출되지 않음

    - onBind() 는 Context.bindService() 를 통해서 호출

      이 때 서비스가 실행중이 아니라면 서비스가 생성되면서 onCreate() 호출되고, onStartCommand()는 호출되지 않음

      서비스가 실행 중이었다면 onBind() 외에 아무것도 불리지 않음

    - onDestroy() 는 보통과 마찬가지로 서비스가 제거되기 직전에 호출

      참고로, Service도 Activity처럼 메모리가 부족할 때 강제 종료

      따라서, 서비스가 재시작할 때 필요한 정보가 있다면 onDestory() 에 저장해야 함

     

     

    Content Provider(콘텐트 제공자)

    - 데이터를 관리하고 다른 어플리케이션 데이터를 제공해주는 컴포넌트

    - 특정 애플리케이션이 사용하고 있는 데이터베이스를 공유하기 위해 사용

    - 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공하는 컴포넌트

    - 공유된 앱 데이터 집합을 관리

    - 데이터베이스의 데이터를 전달할때 많이 사용

    - 데이터는 파일 시스템이나 SQLite 데이터베이스 또는 웹이나 기타 영구적인 저장소 위치 중 앱이 액세스할 수 있는 곳이라면 어디에든 저장할 수 있음

    - 파일입출력, SQLiteDB, Web등을 통해서 데이터를 관리함

    - 안드로이드 시스템의 각종 설정 값이라던지  SD카드 내의 미디어 등에 접근하는 것이 가능하고, 다른 어플리케이션에 접근하는 것도 가능(접근하려는 어플에서 정의한 수준의 접근만 가능하게 됨)

    - 외부 어플리케이션이 나의 어플리케이션 내에 있는 데이터베이스에 함부로 접근하지 못하게 할 수 있으면서도 내가 공유하고 공개하고 싶은 데이터만 공유할 수 있도록 도와주는 컴포넌트

    - 콘텐트 제공자를 통하여 다른 어플리케이션의 데이터를 쿼리하거나 변경할 수 있음

    다른 여러 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 심지어는 수정할 수도 있음(콘텐츠 제공자가 그렇게 하도록 허용하는 경우)

    - 프로바이더는 데이터 read, write에 대한 퍼미션이 있어야 앱 접근 가능

    - 프로바이더는 getType(), query(). insert(), update(), delete(), onCreate()를 구현해줘야 함

    - 안드로이드는 기본적으로 애플리케이션마다 샌드박스에서 동작하기 때문에 시스템에 있는 다른 애플리케이션들끼리의 데이터 접근은 격리됨

    - CURD(Create, read, update, delete) 원칙을 준수함

    - 작은 데이터들은 인텐트로 애플리케이션끼리 공유됨 / 콘텐츠 프로바이더는 음악 파일, 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 적합함

     

    EX) 전화번호부 앱

    Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공하기 때문에 권한을 가진 앱이라면 어떤 것이든 해당 콘텐츠 제공자의 일부를 쿼리하여 특정한 사람에 대한 정보를 읽고 쓸 수 있음

    연락처 정보나 다른 어플리케이션에서 관리하는 정보를 가져오고 싶을 때 혹은 보내고 싶을 때 컨텐트 프로바이더를 사용하게 됨

     

    EX) 페이스북이나 카카오톡 등등 전화번호부를 확인하여 자동으로 친구추가가 되는 기능

    전화번호부 어플리케이션에서 Content Provider를 제공하고  카카오톡이나 페이스북에서 Content Resolver를 가지고 제공하는 데이터를 읽어 옴

     

    Ex) 채팅 어플리케이션

    채팅 어플리케이션에서 사진을 전송하고 싶을 때, 사진 어플리케이션(갤러리)에 접근하여 사진 정보를 가져올 때 콘텐트 프로바이더를 통해 사진 정보를 가져올 수 있음

     

    Content Provider 생명주기

    콘텐트 제공자는 생명주기를 가지고 있지 않음

     

     

    Broadcast Receiver(방송 수신자)

    방송 수신자

    - 안드로이드에서 다양한 이벤트와 정보를 받아 반응하는 컴포넌트

    - 시스템 범위의 브로드캐스트 알림에 응답하는 구성요소

    대부분 UI가 존재하지 않음

    - 브로드캐스팅 메시지를 방송수신자라는 어플리케이션의 구성요소를 이용해 받을 수 있음

    - 디바이스에서 발생하는 일 중에서 어플리케이션이 알아야 하는 상황이 발생하면 알려줌

    - 수신기를 통해 디바이스의 상황을 감지하고 적절한 작업을 수행함

    - 사용자 인터페이스를 표시하지 않지만 상태 표시줄 알림을 생성하여 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있음

    - 다른 구성 요소로의 게이트웨이인 경우가 더 보편적이고, 극소량의 작업만 수행하도록 만들어진 경우가 많음

    - 대다수의 브로드캐스트는 시스템에서 시작

    - 서비스를 시작하여 이벤트를 근거로 한 어떤 작업을 수행하도록 할 수 있음

    - sendBroadcast() 등의 함수를 통해 이벤트 보내짐

     

    EX) Broadcast

    - 시스템 : 화면 꺼짐, 사진 캡처, 시스템 부팅, 배터리 부족, 전화/문자 수신, 네트워크 끊김을 알려주는 것

    - 앱 : 기기에 몇 가지 데이터를 다운로드하여 다른 앱도 사용할 수 있다는 사실을 다른 여러 앱에게 알려주는 것

     

    EX) 문자

    안드로이드 OS에서는 문자 메시지가 오면 모든 앱에 "문자 왔다"라는 하나의 메시지를 방송함. 이 메시지를 받기 위해 브로드캐스트 리시버를 설정하면 되고, 문자가 오면 이벤트를 처리할 수 있음

     

    EX)

    1. 채팅 어플리케이션의 서비스가 채팅 서버로부터 메시지를 받을 때까지 계속 대기
    2. 메시지가 오면 서비스에서 메시지를 확인한 다음 브로드캐스트 수신자에게 메시지 내용과 알람 레벨을 주고 알람을 띄워달라고 요청
    3. 브로드캐스트 수신자는 서비스에서 받은 메시지 내용을 가공하여 푸시 알람으로 사용자에게 메시지가 왔음을 알려줌

     

    Broadcast Receiver 생명주기

    Broadcast Receiver 생명주기 메소드

    onReceive()

    - 리시버에게 브로드캐스트 메시지가 오면 onReceive()가 호출되고, 이 메시지를 인텐트 객체로 가짐

    - 브로드캐스트 리시버는 이 메소드를 실행하는 동안만 활성화 된것으로 간주

    - onReceive() 메소드가 리턴되면 비활성화 됨

     

    Intent(인텐트)

    - 컴포넌트 간의 통신수단

    - 메시지 객체

    - 컴포넌트에 액션, 데이터 등을 전달

    - 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치

    - 인텐트를 통해 각 컴포넌트들을 호출, 실행할 수 있음

    - 인텐트를 통하여 다른 애플리케이션의 컴포넌트를 활성화시킬 수 있음

     

    인텐트의 종류

    1. 명시적 인텐트

    - 대상 컴포넌트가 확실한 경우 (패키지명을 포함한 클래스 풀네임) 

     

    2. 암시적 인텐트

    - 대상 컴포넌트가 정해져있지만, 어떠한 타입과 액션으로 불특정 컴포넌트를 호출하는 방식

     

     

    프로세스 우선순위

    1.포그라운드 프로세스

    - 엑티비티의 사용자 인터페이스가 현재 화면에 보이면서 사용자와 데이터를 입출력할 수 있을 때

    - 사용자와  상호 작용하는 엑티비티를 가지고 있거나 그런 엑티비티에 바인딩된 서비스

    - onCreate/onStart/onStartCommand/onDestory를 실행중인 서비스, onReceive를 실행하는 브로드캐스트 리시버에 해당

     

    2. 가시(visible) 프로세스

     

    3. 서비스 프로세스

     

    4. 백그라운드 프로세스

     

    5. 빈 프로세스

     

     

     

    [참고]

    인텐트

    https://superfelix.tistory.com/309

     

    전반적인거 다

    https://hmgirl.tistory.com/218

    https://meylady.tistory.com/47

     

    MVC 모델

    https://m.blog.naver.com/PostView.nhn?blogId=iedddwww&logNo=220865288769&proxyReferer=https%3A%2F%2Fwww.google.com%2F

    'Security > Mobile' 카테고리의 다른 글

    드로저 사용법  (0) 2019.06.01
    ADB(Android Debug Bridge) 사용법  (0) 2019.06.01
    안드로이드 애플리케이션 디컴파일 도구  (0) 2019.06.01
    모바일 프록시 설정  (0) 2019.06.01
    에뮬레이터  (0) 2019.06.01
    안드로이드 4대 컴포넌트  (0) 2019.05.15

    댓글 0

~ ^ . ^ ~