Android Activity Intent


4. Activity와 Intent

Activity 라이프사이클

Activity는 안드로이드 애플리케이션의 기본 구성 요소 중 하나로, 화면을 구성하고 사용자와 상호작용하는 인터페이스를 제공합니다. Activity의 라이프사이클을 이해하는 것은 중요합니다. 안드로이드 시스템은 Activity의 상태 변화를 관리하고, 각 상태에 대해 특정 콜백 메서드를 호출합니다. 주요 라이프사이클 단계는 다음과 같습니다:

  1. onCreate(): Activity가 생성될 때 호출됩니다. 여기에서 초기화 작업(예: 레이아웃 설정, 데이터 바인딩)을 수행합니다.
  2. onStart(): Activity가 화면에 나타나기 시작할 때 호출됩니다.
  3. onResume(): Activity가 상호작용할 준비가 되었을 때 호출됩니다. Activity가 포그라운드에 있고 사용자와 상호작용할 수 있는 상태입니다.
  4. onPause(): 다른 Activity가 포그라운드로 나타날 때 호출됩니다. 사용자와 상호작용할 수 없는 상태지만, 여전히 보일 수 있습니다.
  5. onStop(): Activity가 더 이상 화면에 보이지 않을 때 호출됩니다.
  6. onDestroy(): Activity가 소멸될 때 호출됩니다.
  7. onRestart(): Activity가 중지되었다가 다시 시작될 때 호출됩니다.
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Activity가 화면에 나타나기 시작할 때 수행할 작업
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Activity가 상호작용할 준비가 되었을 때 수행할 작업
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 다른 Activity가 포그라운드로 나타날 때 수행할 작업
    }

    @Override
    protected void onStop() {
        super.onStop();
        // Activity가 더 이상 화면에 보이지 않을 때 수행할 작업
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Activity가 소멸될 때 수행할 작업
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        // Activity가 중지되었다가 다시 시작될 때 수행할 작업
    }
}

Intent와 Intent Filter

Intent는 안드로이드 컴포넌트 간의 런타임 바인딩을 가능하게 하는 메시징 객체입니다. 주로 Activity, Service, BroadcastReceiver를 시작하거나 데이터를 전달할 때 사용됩니다.

Intent
  1. 명시적 Intent: 특정 컴포넌트를 지정하여 실행합니다.
  2. 암시적 Intent: 수행할 작업을 지정하지만, 실행할 컴포넌트를 명시하지 않습니다. 시스템은 이 작업을 처리할 수 있는 적절한 컴포넌트를 찾습니다.
// 명시적 Intent 예제
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

// 암시적 Intent 예제
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.example.com"));
startActivity(intent);
Intent Filter

Intent Filter는 특정 Intent에 대해 애플리케이션의 컴포넌트를 등록하는 방법입니다. Intent Filter는 AndroidManifest.xml 파일에 정의됩니다.

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" android:host="www.example.com" />
    </intent-filter>
</activity>

Activity 간 데이터 전달

Activity 간에 데이터를 전달하기 위해 Intent를 사용할 수 있습니다. Intent는 putExtra() 메서드를 사용하여 데이터를 포함하고, 수신 Activity에서는 getIntent()getExtras() 메서드를 사용하여 데이터를 가져옵니다.

// 데이터 전달 - 첫 번째 Activity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("KEY_NAME", "Value");
startActivity(intent);

// 데이터 수신 - 두 번째 Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    Intent intent = getIntent();
    String value = intent.getStringExtra("KEY_NAME");
    // 전달받은 데이터를 사용
}
Parcelable 및 Serializable

객체를 전달할 때는 Parcelable 또는 Serializable 인터페이스를 사용해야 합니다.

// Parcelable 예제
public class MyData implements Parcelable {
    private int id;
    private String name;

    protected MyData(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<MyData> CREATOR = new Creator<MyData>() {
        @Override
        public MyData createFromParcel(Parcel in) {
            return new MyData(in);
        }

        @Override
        public MyData[] newArray(int size) {
            return new MyData[size];
        }
    };
}

// 데이터 전달 - 첫 번째 Activity
MyData data = new MyData(1, "Example");
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("DATA_KEY", data);
startActivity(intent);

// 데이터 수신 - 두 번째 Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    Intent intent = getIntent();
    MyData data = intent.getParcelableExtra("DATA_KEY");
    // 전달받은 데이터를 사용
}

이로써 Activity와 Intent, 그리고 Activity 간의 데이터 전달 방법에 대해 설명을 마칩니다. 이러한 개념은 안드로이드 애플리케이션의 기본 구조와 흐름을 이해하는 데 필수적입니다.


Leave a Reply

Your email address will not be published. Required fields are marked *