기본 콘텐츠로 건너뛰기

[안드로이드] 안드로이드 4대 컴포넌트 - 액티비티(Activity)



- 안드로이드 4대 컴포넌트
  1. 액티비티(Activity) : 화면을 구성하는 가장 기본적인 컴포넌트
  2. 서비스(Service) : 백그라운드에서 동작하는 컴포넌트
  3. 컨텐츠 프로바이더(Contents Provider) : 응용 프로그램 간의(앱과 앱) 데이터를 상호 공유하기 위한 컴포넌트
  4. 브로드캐스트 리시버(Broadcast Receiver) : 단말기에서 발생하는 이벤트 수신을 위한 컴포넌트 (네트워크 상태, 배터리 상태, SMS수신, 스크린 꺼짐.. 등)





- 안드로이드 액티비티의 생명주기(C-S-R-P-S-D)
  1. onCreate
  2. onStart
  3. onResume
  4. onPause
  5. onStop
  6. onDestroy

- 생명주기 주의 사항
  1. 일정시간 동안 장치를 사용하지 않거나 안드로이드가 메모리를 회수해야 한다면 액티비티가 소멸될 수 있다.
  2. 메모리 회수가 필요하더라도 절대 실행중인 액티비티를 소멸시키지 않는다.
  3. 일시중지(paused), 중단(stopped) 상태의 액티비티만 destroy 됨. (일시중지나 중단의 경우에 onSaveInstanceState(....) 메서드가 호출됨)
  4. 일반적으로 onPause와 onSaveInstanceState()가 호출되는 것을 염두해 두고 코드를 작성하면 된다.

- 상황에 따른 생명주기
  1. 화면을 실행 했을 경우 : C - S - R
  2. 뒤로 버튼을 눌러 화면에서 없앨 경우 : P - S - D
  3. 홈 버튼을 눌러 화면을 닫았을 경우 : P - S                                             
          (에뮬레이터에서는 개발자옵션에서 '액티비티 유지 안함' 옵션을 설정하면 홈 버튼을 눌러도 2번과 같이 종료됨, 실제 장치는 Dev 도구 설치를 해야 사용가능)
  1. 3번 이후 recent 버튼을 눌러 다시 앱으로 돌아갈 경우 : S - R
  2. 화면을 회전했을 경우 : 2번 + 1번 (P - S - D - C - S - R)




* 화면이 회전되었을때 VIEW를 다시 create 해서 기존의 선택값 등이 초기화 된다. 그것을 방지하기 위한 방법은?
  1. onSaveInstanceState(Bundle bundle) 메소드를 오버라이드 하여 data를 저장하고 onCreate에서 불러온다.

예) 
@Overrideprotected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);   

    outState.putInt(KEY_INDEXmCurrentIndex);
}

@Overrideprotected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        mCurrentIndex = savedInstanceState.getInt(KEY_INDEX0); 

    }   
}

  1. Singletone 패턴을 활용하여 데이터를 관리한다.
  2. Application 객체를 만들어 관리한다.

* Bundle 객체에 데이터를 저장하거나 읽는 타입의 제약 사항은?
  1. 기본형(primitive) 데이터 타입
  2. Serializable 인터페이스를 구현하는 객체
  3. Parcelable 인터페이스를 구현하는 객체 (구현하기 번거롭지만, Serializable 보다 빠르며 권장됨)

댓글

이 블로그의 인기 게시물

[안드로이드] DialogFragment로 Custom Dialog 만들기

이번 포스팅에서는 안드로이드에서 기본 제공하는 다이얼로그가 아닌 커스텀 다이얼로그를 적용하면서 삽질 했던 내용에 대해서 써 보려고 한다. 만들고자 하는 모양은 아래와 같다. 이전에 포스팅한 라운드 및 그라데이션 처리된 나인패치 이미지 가 적용된 다이얼로그이다. 하단의 스샷 처럼 라디오 버튼 [동의], [미동의] 선택값을 다이얼로그에 뿌려주는 것 까지 다루려고 한다. 하지만 목적은 커스텀 다이얼로그의 구현이고, 또 귀차니즘으로 인해 결과물의 폰트나 컬러, 버튼 등은 똑같이 구현 하지는 않으려고하니 많은 양해를 바란다. ㅠㅠ 참, 이 블로그의 포스팅 목적은 개발 초보인 본인의 삽질 방지를 위한 기록에 초점이 맞춰져 있으니, 잘못된 부분이 분명 있을 수 있고, 더 심플하고, 효율적이고 방법들이 얼마든지 있을 수 있다.그러한 부분들을 번거로움을 무릅쓰고 공유를 해 주신다면 감사히 받겠습니다.(편의상 반말로 쭉~ 갈 건데.. 왠지 여기서는 존댓말을 써야....) 여튼 이제 본론으로 들어가자. 다이얼로그를 커스텀하려니 막막함에 자연스레 검색을 하게 됐다. android custom dialog 라는 키워드로 구글에 검색을 해보면.. 1. Dialog를 이용하는 방법 2. AlertDialog.Builder를 이용하는 방법 3. DialogFragment를 이용하는 방법 이렇게 3가지를 주로 찾을 수 있었다. 뭐야.. 뭐가 더 좋은거야... 검색을 계속 해보니 Android Developer 공식 홈에서 대화상자 페이지를 보니 뭘 써야 할지 알 수 있었다. 해당 내용은... Dialog  클래스가 대화상자의 기본 클래스이지만,  Dialog 를 직접 인스턴스화하는 것은 삼가야 합니다. 대신 다음 서브클래스 중 하나를 사용하세요. AlertDialog  :  제목 하나, 최대 세 개의 버튼, 선택 가능한 품목 목록 또는 사용자 지정 레이아웃...

[안드로이드] 라운드 처리 & 그라데이션이 들어간 나인패치 이미지 사용하기

- 안드로이드 스튜디오에서 라운드 처리 & 그라데이션이 들어간 나인패치 이미지 사용하기 현재 수행하고 있는 안드로이드 프로젝트의 디자이너가 적용을 원하는 이미지를 보내줬다. 이미지는 그라데이션에 라운드 처리가 된 이미지였다. 기존에 적용 방법만 대충 알아보고 사각형의 단일 색의 나인패치 이미지만 적용해봤던터라 그 방법 그대로 적용을 해봤다. - 기존에 나인패치에 대해 알고 있었던 것. 1. 그냥 drawable 폴더에 넣으면 되겠지.. 2. 아무 해상도 이미지로 asset studio에서 나인패치 적용하면 알아서 키우고 줄이고 해 주겠지 무지한 것을 인지하지 못한 본인은 디자이너에게 자신있게  Android asset studio 를 이용해 나인 패치를 해 달라하고, 그걸 받아서 적용했다. 그런데 왠걸.. 제대로 되지 않는다. - 증상 1. 라운드 처리된 코너 부분이 뭉개져 나옴 2. 그라데이션이 엉망임 3. 원본 이미지의 굵기가 제대로 표시가 안됨 4. 완벽한 반원 형태가 아니고 늘어남 ...........할거 많은데.. 온갖 삽질을 하며 시간을 낭비했다. 맘 같아선 그냥 네모에 초록색이나 보라색으로 shape로 그려 버리고 싶었다... 하지만 디자이너님이 라운드 수치는 좀 줄인다 쳐도 그라데이션은 포기 할 수 없다고....ㅠㅠ 결국 다시 삽질 삽질 삽질.. 그러다 Stack Overflow에서 글 하나를 발견하게 되었다. 1. 단순한 사각형 테두리 이미지라면 기본 drawable 폴더에 넣어도 상관없다. 2. 만약, 라운드 처리가 된 이미지라면 drawable-xxhdpi 한 곳에 넣어두고 그 보다 낮은 해상도의 경우 스케일 다운이 되면서 대부분의 경우에 잘 나타난다.  오.... 뭔가 실마리를 잡은거 같아서 또 폭풍 검색.. 다른 글에서는.. 1. 나인패치 이미지는 기본 drawable에 두면 안된...

[안드로이드] 툴바(toolbar)

- 툴바 사용자가 할 수 있는 액션을 포함하며, 디자인의 일관성을 제공 명칭 : 롤리팝 부터 툴바 등장, 롤리팝 이전에는 액션 바. 툴바가 더 유연한 사용자 인터페이스를 제공함. AppCompat 라이브러리의 툴바를 사용하면 API 7까지 커버가 가능하다. 툴바 안에 일반 뷰(ImageView, TextView 등을 적적할게 추가하여 사용할 수 있다. 하지만 기본적으로 들어가 있는 패딩과 마진이 있기 때문에 사용할때 주의해야 한다.(툴바를 적용시키고 백그라운드 색을 확 티나게 적용하였을 경우 확인 할 수 있다.) - 툴바 VS 액션바 툴바의 시각적인 디자인이 변경된 것이 가장 큰 차이점. 액션바는 제약을 많이 갖고 있고, 항상 화면의 위에 나타나야 하며, 하나만 둘 수 있다. 액션바는 크기가 정해져 있어 변경될 수 없다. 툴바를 직접 포함시키는게 가능하고 원하는 곳에 위치시킬 수 있으며, 여러개가 포함 가능. 내부에 뷰를 둘 수 있고, 높이 조절도 가능하다. - 툴바에 메뉴 추가하기 res -> New -> Android resource file -> Resource type 을 menu로 변경 후 파일 생성 <item> 태그 추가 후 속성에 showAsAction 속성 부여 showAsAction : 액션 항목이 툴바에 나타날 것인지, 아니면 오버 플로 메뉴에 나올것인지를 나타낸다. ifRoom|withText 이렇게 값을 주면, 툴바에 공간이 있다면 액션항목의 아이콘과 텍스트가 모두 툴바에 나타난다. 만일 아이콘을 보여줄 공간은 있지만 텍스트의 공간은 없다면 아이콘만 나타난다. 또한 둘다 보여줄 공간이 없다면 오버플로 메뉴에 들어간다. 기타 옵션 always : 사용은 권장하지 않음, ifRoom을 사용해서 안드로이드 OS가 결정하게 하는 것이 좋음. never : 자주 사용하지 않는 액션의 경우 never로 지정해서 오버플로에 두는 것이 좋다. 사용 예 메뉴...