출처 : Bill Phillips, Android Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides) 3st Edition
■ 로그
1 2 | public static int d(String tag, String msg) | cs |
1 2 3 4 5 6 7 | @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate(Bundle) called"); setContentView(R.layout.activity_quiz); } | cs |
■ 로테이션과 액티비티 라이프사이클
- 디바이스가 로테이션될때, 액티비티의 인스턴스는 destroyed되고 새로운 인스턴스가 생성된다.
- 디바이스 로테이션은 디바이스 설정을 바꾼다. 디바이스 설정은 개별 기기의 현재상태를 결정하는 특성이다. 스크린방향 등
- 키보드 사용가능, 언어, 멂티윈도우 모드, 스크린 방향등은 런타임시 바꿀수 있따.
- 안드로이드는 디바이스 로테이션시 기존의 인스턴스를 destroy하고 새로운 디바이스 설정에 맞는 리소스(레이아웃)을 찾아 인스턴스를 실행한다..
- ex) landscape layout을 res폴더 우클릭 -> UI모드 -> landscape선택을 통해 만들면 디바이스 로테이션시 landscape 사용
- FrameLayout : 위젯들이 android:layout_gravity 속성을 통해 (ex>center_horizental, bottom_right) 정렬된다. 주로 여러 Fragment를 동일한 위치내에서 교차하여 표시하고자 할때사용.
- LinearLayout: 여러 View 위젯들을 한줄의 가로 또는 세로 방향으로 나열할 때 사용하는 Layout 클래스. 위젯을 비율,dp등으로 크기지정
■ 로테이션간 데이터 전달
- 로테이션 등을 디바이스 설정이 바뀔때, 이전 디바이스 설정에서 이루어진 액티비티의 값을 새롭게 생성되는 액티비티에 전달하는방법
- 그거슨 바로 onSaveInstanceState(Bundle outState)이다.
- onSaveInstanceState(Bundle outState)은 onStop()이 실행되기 전에 호출된다.
- 단, 유저가 백버튼 눌렀을때는 onSaveInstanceState(Bundle outState)이 실행되지않는다. 왜냐면 백버튼 눌렀을 경우 인스턴스가 아예메모리에서 삭제되기 떄문. onStop은 아직 메모리에 남아있는상태를 의미한다.
- Bundle : Key,Value 쌍으로 이루어진 데이터 구조이다.
- onSaveInstanceState(Bundle outState)은 번들에 데이터를 저장하고, onCreate(Bundle)에서 다시 읽는 방식으로 사용한다.
1. 키값추가
1 2 3 4 5 | public class QuizActivity extends AppCompatActivity { private static final String TAG = "QuizActivity"; private static final String KEY_INDEX = "index"; private Button mTrueButton; | cs |
2. putInt로 번들에 집어넣기
1 2 3 4 5 6 7 8 | @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); Log.i(TAG, "onSaveInstanceState"); savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); } | cs |
3. Bundle에 저장한 값을 onCreate에서 받아오기
1 2 3 4 5 6 7 8 9 10 | @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate(Bundle) called"); setContentView(R.layout.activity_quiz); if (savedInstanceState != null) { mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0); } } | cs |
■ 액티비티 라이프사이클
-Stashed : 액티비티의 객체는 남아있지 않지만 OS가 다시 되살릴수 있는 상태
- onStop: 유저가 수정한 값 등의 영구저장 데이터를 저장할때 사용
- onSaveInstatnceState(Bundle) : 임시값을 저장할때 사용
'Web Programming > Android' 카테고리의 다른 글
7. UI Fragments and the Fragment Manager (0) | 2018.08.20 |
---|---|
5. Your Second Activity (0) | 2018.08.16 |
2. Android and Model-ViewController (0) | 2018.08.14 |
1. Your First Android Application (0) | 2018.08.14 |