상세 컨텐츠

본문 제목

[Android] Activity 수명주기

Android 개발

by mobile 2012. 8. 12. 01:44

본문

반응형

▶ 액티비티의 상태 메소드

 상태메소드

설명 

 onCreate()

액티비티가 처음에 만들어졌을 때 호출됨

화면에 보이는 뷰들의 일반적인 상태를 설정하는 부분

이전 상태가 저장되어 있는 경우에는 번들 객체를 참조하여 이전 상태 복원 가능

이 메소드 다음에는 항상 onStart() 메소드가 호출됨

 onStart()

액티비티가 화면에 보이기 바로 전에 호출됨

액티비티가 화면 상에 보이면 이 메소드 다음에 onResume() 메소드가 호출됨

액티비티가 화면에서 가려지게 되면 이 메소드 다음에 onStop() 메소드가 호출됨

 onResume()

액티비티가 사용자와 상호 작용하기 바로 전에 호출됨 

 onRestart()

액티비티가 중지된 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출됨 

이 메소드 다음에는 항상 onStart() 메소드가 호출됨

 onPause()

또 다른 액티비티를 시작하려고 할 때 호출됨

저장되지 않은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능을 수행하는 메소드임

이 메소드가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 매우 빨리 수행 된 후 리턴되어야 함

액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음

 onStop()

액티비티가 사용자에게 더 이상 보이지 않을 때 호출됨

액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출됨

액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 

 onDestroy() 

액티비티가 소멸되어 없어지기 전에 호출됨
이 메소드는 액티비티가 받는 마지막 호출이 됨
액티비티 애플리케이션에 의해 종료되거나(finish() 메소드 호출) 시스템이 강제로 종료시키는 경우에 호출될 수 있음

위의 두가지 경우를 구분할 때 isFinishing()메소드를 이용함

액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음 


▶ 예제 : SampleLifeCycleActivity.java

import android.app.Activity; 

import android.content.SharedPreferences; 

import android.os.Bundle; 

import android.view.View; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.Toast; 


public class SampleLifeCycleActivity extends Activity { 

 

    public static final String PREF_ID = "Pref01"; 

    public static final int actMode = Activity.MODE_PRIVATE; 

  

    EditText txtMsg; 

    Button btnFinish; 

  

    @Override

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

  

        txtMsg = (EditText) findViewById(R.id.txtMsg); 

  

        btnFinish = (Button)findViewById(R.id.btnFinish); 

        btnFinish.setOnClickListener(new Button.OnClickListener () { 

            public void onClick(View v) { 

                finish(); 

            } 

        }); 

  

        Toast.makeText(getBaseContext(), "onCreate ...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onDestroy() { 

        super.onDestroy(); 

  

        //clearMyPrefs(); 

  

        Toast.makeText(getBaseContext(), "onDestroy ...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onPause() { 

        super.onPause(); 

  

        saveCurrentState(); 

  

        Toast.makeText(getBaseContext(), "onPause ...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onRestart() { 

        super.onRestart(); 

  

        Toast.makeText(getBaseContext(), "onRestart ...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onResume() { 

        super.onResume(); 

  

        restoreFromSavedState(); 

  

        Toast.makeText(getBaseContext(), "onResume...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onStart() { 

        super.onStart(); 

  

        Toast.makeText(getBaseContext(), "onStart ...", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onStop() { 

        super.onStop(); 

  

        Toast.makeText(getBaseContext(), "onStop ...", Toast.LENGTH_LONG).show(); 

    } 

  

    protected void restoreFromSavedState() { 

        SharedPreferences myPrefs = getSharedPreferences(PREF_ID, actMode); 

        if ((myPrefs != null) && (myPrefs.contains("txtMsg")) ){ 

            String myData = myPrefs.getString("txtMsg", ""); 

            txtMsg.setText(myData); 

        } 

    } 

  

    protected void saveCurrentState() { 

        SharedPreferences myPrefs = getSharedPreferences(PREF_ID, actMode); 

        SharedPreferences.Editor myEditor = myPrefs.edit(); 

        myEditor.putString( "txtMsg", txtMsg.getText().toString() ); 

        myEditor.commit(); 

    } 

  

    protected void clearMyPrefs() { 

        SharedPreferences myPrefs = getSharedPreferences(PREF_ID, actMode); 

        SharedPreferences.Editor myEditor = myPrefs.edit(); 

        myEditor.clear(); 

        myEditor.commit(); 

    } 

  

    @Override

    protected void onRestoreInstanceState(Bundle savedInstanceState) { 

        super.onRestoreInstanceState(savedInstanceState); 

  

        Toast.makeText(getBaseContext(), "onRestoreInstanceState called.", Toast.LENGTH_LONG).show(); 

    } 

  

    @Override

    protected void onSaveInstanceState(Bundle outState) { 

        super.onSaveInstanceState(outState); 

  

        Toast.makeText(getBaseContext(), "onSaveInstanceState called.", Toast.LENGTH_LONG).show(); 

    } 

}


반응형

'Android 개발' 카테고리의 다른 글

[Android]브로드캐스트 수신자  (0) 2012.08.12
[Andrid] Service 예제  (1) 2012.08.12
[Android] Parcelable 인터페이스  (0) 2012.08.11
[Android] Activity 와 Stack Flag  (0) 2012.08.11
[Android]Intent 예제  (0) 2012.08.11

관련글 더보기

댓글 영역