APP/개발

08. boostcourse_ android app_ java_intent/flag

풍요 평화 만땅 연구원 2022. 7. 2. 17:27

* EditText editText ~ 를 버튼 안에서 사용하려면 위에서 객체선언해줘야함

 

 

1. 다른 액티비티 실행하기

- 처음 보이는 화면을 메인 액티비티라고 부를 수 있는데 이 메인 액티비티 안에 들어있는 버튼을 눌렀을 때 새로운 액티비티를 화면에 보여주고 싶다면 startActivity나 startActivityForResult 메소드를 사용할 수 있음

->  인텐트 객체를 만들 때는 컨텍스트 객체와 화면에 띄울 액티비티의 클래스 인스턴스를 파라미터로 전달

-> 컨텍스트는 getApplicationContext 메소드를 호출하면 반환받을 수 있으며 화면에 띄울 액티비티의 클래스 인스턴스는 액티비티의 이름 뒤에 점(.)과 class를 붙이면 참조할 수 있음

-> startActivityForResult 메소드를 호출하면 인텐트 객체가 시스템으로 전달되는데 구체적으로 액티비티 매니저에게 전달

-> 액티비티 매니저는 지정한 액티비티를 실행하여 화면에 보여줌

** 내가 직접 다른 액티비티의 메소드를 호출하여 실행하는 것이 아니라 시스템을 통해서 실행된다는 점을 꼭 기억!

 

2. 액티비티 전환하기

- 새로운 액티비티를 실행한 후에 다시 원래의 액티비티로 돌아가고 싶다면 단순히 finish 메소드를 호출하기만 하면됨

- 어플리케이션에서 실행되는 액티비티는 안드로이드 태스크(Android Task)에서 스택(Activity Stack)형태로 관리되며 이때 순서는 각 액티비티가 열린 순서와 같기 때문

- 화면에 보이는 액티비티가 있을 때 새로운 화면이 실행되면 그 화면은 기존 화면의 위에 보이는 것과 같음

 

 

3. 다른 app 전환하기(전화걸기)

 

- xml (전화번호 입력할 edittext, 완료 할 button)

- java

 

* EditText editText ~ 를 버튼 안에서 사용하려면 위에서 객체선언해줘야함

 

 

- 버튼 클릭하면 나올 기능 넣어주기 -> 입력한 값 받아서 전화거는 앱(기능)실행

 

4. 플래그

 

- 인텐트에 추가할 수 있는 옵션

- 시스템이 인텐트를 해석한 후 무언가를 동작시킬 때 옵션에 따라 다른 동작을 하도록 만들 수 있음

- 플래그는 인텐트 객체의 addFlags 메소드를 이용해 설정할 수 있으며 여러 개의 플래그를 | 기호로 붙여 한꺼번에 설정할수있음

- 가장많이 사용되는 플래그

  : Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP

- 예를 들어, SMS 문자를 수신했을 때 그 내용을 받아 처리하는 것이 브로드캐스트 수신자(BroadcastReceiver)

-> 이 브로드캐스트 수신자(BroadcastReceiver)에서 액티비티를 띄우고 그 안에서 수신한 문자를 보여주려 한다면 문자가 도착할 때마다 액티비티가 뜨게  될 거

-> 따라서 화면에 뜬 액티비티를 바로바로 없애주지 않으면 여러 개의 액티비티가 층층이 쌓이는 문제가 발생할 수 있는데 이것을 Intent.FLAG_ACTIVITY_SINGLE_TOP 으로 해결할 수 있음

-> Intent.FLAG_ACTIVITY_SINGLE_TOP 플래그는 동일한 액티비티가 이미 메모리에 만들어져 있다면 추가로 만들지 않고 그 액티비티를 화면에 띄워주는 역할

-> Intent.FLAG_ACTIVITY_NEW_TASK 플래그는 액티비티들을 관리하는 태스크(TASK) 객체를 새로 만들도록함

-> 나중에 살펴볼 브로드캐스트 수신자(BroadcastReceiver)나 서비스(Service)는 화면이 없기 때문에 새로운 화면을 띄워주려면 먼저 태스크(Task) 객체가 만들어져야 함

-> Intent.FLAG_ACTIVITY_CLEAR_TOP 플래그는 원하는 액티비티가 이미 메모리에 만들어져 있고 그 이후에 다른 액티비티가 만들어진 경우 원하는 액티비티를 찾아 다시 띄울 때 그 이후에 만들어진 다른 액티비티들은 없애주는 역할

->이런 플래그들을 이해하려면 액티비티 스택(Activity Stack)에서 액티비티가 관리된다는 점을 이해해야함

 

5. 부가데이터

 

- 인텐트는 시스템을 통해 다른 액티비티로 전달될 수 있는데 액티비티뿐만 아니라 다른 애플리케이션 구성요소로도 전달될 수 있음

- 자주 사용되는 애플리케이션 구성요소로는 액티비티(Activity), 서비스(Service), 브로드캐스트 수신자(BroadcastReceiver) 등이 있으며 이 구성요소들 간에 데이터를 전달하는 데 인텐트가 사용되는 것

- 부가 데이터는 시스템에서 건드리지 않고 전달만 되며 인텐트 안에 번들(Bundle) 객체가 들어가 있어 그 안에 데이터를 넣을 때는 put …, 문자열을 가져올 때는 get … 메소드를 사용