1. 런타임 구성 변경
- 안드로이드는 언어, 위치, 하드웨어 에 대한 변겨잉 실행 시점에 이뤄질 경우
각 애플리케이션을 종료했다가 재시작 시킨 뒤 리소스 값들을 다시 읽어 들임으로써 변경된 내용을 반영
(기기회전, 키보드)
android:configChanges
-orientation 화면이 세로 모드나 가로모드로 전환됐다
-keyvoardHidden 키보드가 나타났거나 숨겨졌다
-[p104]
<activity android:name=".TodoList"
android:label="@string/app_name"
android:theme="@style/TodoTheme"
android:configChanges="orientation|keyboardHidden"/>
- 속성을 추가하면, 지정된 구선 변경을 위해서느느 재시작되지 않고, 액티비티의 onConfigurationChanged 메소드 호출
@Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
[ ... Update any UI based on resource values ... ]
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
[ ... 달라진 방향에 반응 ... ]
}
if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
[ ... React to changed keyboard visibility ... ]
}
}
- 없다면 애플리케이션 재시작
2. 애플리케이션 클래스 확장하기
- 애플리케이션 상태 유지
- 애플리케이션 컴포넌트들 간에 객체를 전송할 수 있다
- 여러 애플리케이션 컴포넌트들이 사용하는 리소스들을 관리하고 유지할 수 있다.
// ** Listing 3-7: Skeleton application class
// Appliction Class Extenstion
import android.app.Application;
import android.content.res.Configuration;
public class MyApplication extends Application {
private static MyApplication singleton;
// Returns the application instance
public static MyApplication getInstance() {
return singleton;
}
@Override
public final void onCreate() {
super.onCreate();
singleton = this;
}
}
// Manifest entry
<application android:icon="@drawable/icon"
android:name="MyApplication">
[... Manifest nodes ...]
</application>
// Use in code
MyObject value = MyApplication.getInstance().getGlobalStateValue();
MyApplication.getInstance().setGlobalStateValue(myObjectValue);
- 약하게 결합된 애플리케이션 컴포넌트들 간에 객체를 전송하거나 애플리 케이션 상태 혹은 공유 리소스를 유지하는데 효과적
3. 애플리케이션 수명 주기 이벤트 재정의 하기
- 각 상황에따른 대처가능
// ** Listing 3-8: Overriding the application life cycle handlers
public class MyApplication extends Application {
private static MyApplication singleton;
// Returns the application instance
public static MyApplication getInstance() {
return singleton;
}
@Override
public final void onCreate() {
super.onCreate();
singleton = this;
}
@Override
public final void onTerminate() {
super.onTerminate();
}
@Override
public final void onLowMemory() {
super.onLowMemory();
}
@Override
public final void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}
4. 액티비티 생명주기
// ** Listing 3-12: Activity state event handlers
package com.paad.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
// Called at the start of the full lifetime.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize activity.
}
// Called after onStart has finished, use to restore UI state
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
}
// Called before subsequent visible lifetimes
// for an activity process.
@Override
public void onRestart(){
super.onRestart();
// Load changes knowing that the activity has already
// been visible within this process.
}
// Called at the start of the visible lifetime.
@Override
public void onStart(){
super.onStart();
// Apply any required UI change now that the Activity is visible.
}
// Called at the start of the active lifetime.
@Override
public void onResume(){
super.onResume();
// Resume any paused UI updates, threads, or processes required
// by the activity but suspended when it was inactive.
}
// Called to save UI state changes at the
// end of the active lifecycle.
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
super.onSaveInstanceState(savedInstanceState);
}
// Called at the end of the active lifetime.
@Override
public void onPause(){
// Suspend UI updates, threads, or CPU intensive processes
// that don뭪 need to be updated when the Activity isn뭪
// the active foreground activity.
super.onPause();
}
// Called at the end of the visible lifetime.
@Override
public void onStop(){
// Suspend remaining UI updates, threads, or processing
// that aren뭪 required when the Activity isn뭪 visible.
// Persist all edits or state changes
// as after this call the process is likely to be killed.
super.onStop();
}
// Called at the end of the full lifetime.
@Override
public void onDestroy(){
// Clean up any resources including ending threads,
// closing database connections etc.
super.onDestroy();
}
}
// ******************************************************************* //
- 액티비티가 다시 활성화 될때 전과 동일한 UI를 나타낼수있도록 하려면,
OnSaveInstanceState를 이용하여 UI상태(체크박스상태, 사용자 포커스...)를 저장
- OnPause 메서드에서 저장되지 않는 변경을 저장, 액티비티가 포그라운드에 있지 않을 때 스레드나 프로세스 혹은 브로드캐스트 리시버를 일시 중단하고자 할 경우
- UI 상태를 다시 읽어들이는 것은 onCreate와 onRestoreInstanceState 메서드이므로 onResume에서는 필요없다
- onResume, onPause는 빠르게 처리되도록하는것이 좋다
- onPause에서 중단된 브로드케스트 리시버나 다른 처리를 재등록하려면 onResume을 이용
'안드로이드 > 고급' 카테고리의 다른 글
[PAAD] 4장 메뉴 (0) | 2011.08.17 |
---|---|
[PAAD] 4장 커스텀 뷰 만들기 (2) | 2011.08.14 |
[PAAD] 4장 리소스 드로어블 (링크_참고자료) (0) | 2011.08.14 |
[PAAD] 3장 리소스 다루기 (0) | 2011.08.13 |
[PAAD] 2장 시작하기 정리 (0) | 2011.08.12 |