안드로이드 스튜디오

안드로이드 스튜디오 코딩과 Activity Life Cycle 이해

coding art 2022. 5. 3. 10:51
728x90

 

아래에 기술된 블로그 내용에 관한 30분 유튜브 강의 영상입니다. 구독지원 부탁드려요.

https://youtu.be/189obzqKIWo

 

 

Activity Lifecycle?

마이크로 컨트롤러인 아두이노 IDE에서 C언어 코드 작성을 위해서는

- 라이브러리 호출과 전역 변수 설정이 이루어지는 헤더 영역,

- 업로딩된 코드 실행에 필요한 파라메터들의 일회성 초기화가 이루어지는 setup( ) ,

- 반복적으로 코드 실행이 이루어지는 loop( ) 로 간단하게 구성된다.

 

한번 실행이 되면 setup( ) 이 1

회 실행되어 초기화한 후 지속적으로 loop( ) 가 실행된다.

- 전원을 끄거나 또는 RESET 버튼을 누를 경우 다시 되풀이 되는데 이를

- 아두이노 마이크로 컨트롤러의 lifecycle 이라 할 수 있을 것이다.

 

한편 스마트폰 안드로이드 스튜디오 코딩에서는

- Activity lifecycle 또는 Activity instance 가 있을 수 있다.

- 파이선 사용자라면 instance 가 더 친근한 개념일 수 있다.

- 안드로이드에서의 Activity lifecycle은 아두이노에 비해 조금 복잡한 편이긴 하다.

- 우선 background 와 foreground 에 대해 간단히 알아보자.

  * background 의 단적 예로서는 만약 bluetooth 를 켜 놓은 상태면 bluetooth 를 사용치 않아도 의도적으로

    끄기 전까지는 내부적으로는 이 bletooth가 가동되며 전기 소모가 무척 많이 일어난다.

 * 반면에 foreground 는 앱 사용 시 스마트폰과 상호작용이 가능한 가시적인 상태에 있을 때를 의미한다.

   즉 멀티 잡을 실행할 때에 사용치 않고 쉬는 앱들은 일단 비가시적이고 상호작용이 멈춘 상태이므로 foreground 가     아니라 할 수 있다.

 

아래는 폰에서 activity가 이루어지는 기본 패턴이다.

- 다소 복잡해 보이지만 초보자가 코딩 시 배워야 할 중요한 6개 메소드 항목 중 하나가 onCreate( ) 메소드(method).  - 참고로 메소드란 클라스 명령에 포함된 함수(function)를 뜻한다.

 

onCreate(  ) 는 아두이노의 setup( ) 과 유사하게 파라메터들의 초기화 작업이 이루어지며 하나의 activity가 꺼지기 전에 한번 사용된다.

 

onStart( )는 activity가 시작될 때 가시적으로 만듬과 동시에 터치와 같은 상호작용이 가능하게 하자마자 onResume( ) 으로 바톤을 넘긴다.

 

onResume( )은 재개한다는 의미로 가시성과 상호작용이 이루어지는 foreground 상태이다. 계속 이 상태를 유지하지만 갑자기 온 전화를 받는다거나 다른 activity로 네비게이션할 때 그리고 화면이 꺼지게 될때 빠져 나오게 된다.  특히 전화 수신시에는 onPause( ) 를 부르게 된다.

- onPause( )는 마이크로컨트롤러의 인터럽트 기능과 유사하게 현재 activity 의 필수적인 정보들을 저장해 두었다가

- onResume( ) 할 때 써먹게 된다.

- 게임 중에 잠깐 onPause( ) 했다가 다음 대응책을 준비한 후 다시 activity로 재개 즉 onResume( ) 할 수 있다. 

- 한편 이와는 달리 onStop( )도 이미 가시성이 사라진 상태로서 이미 필수 데이터를 어느정도 저장해둔 상태이다.

- 하지만 다시 재개할 경우 onResume( ) 이 아닌 onStart( ) 즉 가시성과 상호작용을 준비하도록 복귀가 이루어진다는 점에서 onResume( ) 과는 다르다.

 

아래는 codingart 블로그에서 소개한 바 있는 블루투스 LED toggle 코드의 MainActicity 에 사용된 onCreate( ) 예다.

 

- 초보 상태에서는 일단 onCreate( ) 을 잘 이해하고 코드를 작성해야 할 것이다.

- 나머지는 알아서 꺼지든지 아니면 강제 종료가 일어날수도 있음에 유의하고 차차 실력이 쌓이면 처리가 가능하다.

 

- Activity lifecycle 을 이해했다면 가장 간단하면서도 짧은 형태의 안드로이드 스튜디오 코딩을 구상해 보자.

- 유튜브에 간단한 예제를 능숙하게 소개하는 사례가 많긴하다.

- 코딩이란게 하면 할수로록 실력이 늘고 명확해져야 하는데 그렇치 못한 이유가 바로 찐 암기식이기 때문이다.

 

간단한 안드로이드 코드 예

1.  초기화 단계에 onCreate( ) 이 반드시 한번들어와야 한다.

2. onStart( ) 와 onResume( ) 이 내부에서 자동으로 실행되면 가시적으로 볼 수 있으며 상호작용이 가능한 문자열 입력 박스와 하나의 버튼을 준비해 보자.

3. activity_main.xml의 ConstraintLayout 대신 다루기 쉬운 LinearLayout으로 대체하자.

 

4. layout에서 이름과 같은 문자열을 입력할 수 있도록 EditText 와 Button 요소를 각 하나씩 배치하기로 하자.

  - EditText는 Design의 Pallete에서 보이지 않으므로 직접 코드를 타이핑하여 입력하자.

  - 폭(width) 는 300dp 로하고 높이(height) 는 wrap_content(컨텐트를 둘러쌓는 정도의 크기) 로 처리하자.

  - matched_parent 는 해당 방향 스마트폰 경계선까지를 뜻하므로 layout 정의에 편리-->수평으로 길쭉한

    박스  설정에도 편리하다.

  - wrap_content 는 해당 방향으로 길이 조절 가능

 

5.  반면에 Button 은 Pallete에 있으므로 드래그 처리하고 조금 손보기로 한다.

 - EditText 와 Button 이 한줄로 늘어선 horizontal 로 표현된다.

 - Button 을 EditText 밑으로 내리려면 LinearLayout 밑에 android:orientation="vertical" 을 입력하자.

 

6. layout의 EditText와 Button을 MainActivity.xml에서 불러 사용하려면 아래와 같이 미리 id 부여가 필수적이다.

   - android:id="+id/xxx"

   - xxx는 id의 변수명 

7. MainActivity.xml 에서 EditText 와 Button 을 public class 아래 부분에서 불러 쓸 수 있도록 미리 선언하자.

layout.activity_main의 id/명칭 과 달라도 무관

onCreate( ) 의 setContentView 이하에서 입출력 처리 실행 코딩 작업을 한다.

 

8. MainActivity에서 findViewById 명령에 의해 layout의 위젯요소들과 매칭이 되도록 조회한다. 

가시적 정보를 가져오려면 setOnClickListner 사용-명령이 길어 자동완성기능 사용 처리

이어지는 나머지 내용도 기억하기 어려우므로 method implementation 을 위한 자동 replacement 기법 사용 후 마지막 setText 부분만 타이핑 입력한다.

 

버튼을 눌러 출력 결과를 확인하자.

계속해서 커서를 마지막에 위치 시킨 후 backspace 로 다 지워 버린 후 다시 버튼을 클릭해 보자. 동일한 출력 결과를 관찰할 수 있을 것이다. 즉 이 과정은 onResume( )이 반복적으로 이루어진다는 점이다.

 

 

 

 

Under Construction ...