티스토리 뷰

728x90
반응형
SMALL

안녕하세요, 안드로이드 앱 개발 공부 중인 여러분! 오늘은 안드로이드 앱에서 화면 간 전환과 액티비티 생명주기에 대해 알아보겠습니다. 액티비티 생명주기와 함께 다양한 화면 간 전환 기법을 익힘으로써, 보다 유연하고 효과적인 앱을 만들 수 있게 될 것입니다.

1. 액티비티 생명주기(Lifecycle)

안드로이드 액티비티는 다양한 상태(State)를 가지며, 이 상태들은 생명주기 메서드를 통해 관리됩니다. 주요 생명주기 메서드에 대한 이해는 안드로이드 앱 개발에서 필수적입니다.

  • onCreate(): 액티비티가 생성될 때 호출됩니다.
  • onStart(): 액티비티가 사용자에게 보여지기 시작할 때 호출됩니다.
  • onResume(): 액티비티가 사용자와 상호작용하기 시작할 때 호출됩니다.
  • onPause(): 액티비티가 다른 액티비티로 가려질 때 호출됩니다.
  • onStop(): 액티비티가 화면에서 사라질 때 호출됩니다.
  • onDestroy(): 액티비티가 소멸될 때 호출됩니다.

2. 화면 간 전환

2-1. 명시적 인텐트(Explicit Intent)

// 현재 액티비티에서 다른 액티비티로 이동
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)

2-2. 암시적 인텐트(Implicit Intent)

// 다른 앱의 액티비티로 이동
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"))
startActivity(intent)

3. 데이터 전달

3-1. 인텐트에 데이터 추가

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

3-2. 데이터 받기

// SecondActivity에서 데이터 받기
val receivedData = intent.getStringExtra("key")

4. 액티비티 결과 반환 - 최신 방법 활용 

* Android API 레벨 23 (Android 6.0, Marshmallow)부터 onActivityResult() 메서드는 사용이 중단되었습니다. 대신 Google은 결과를 처리하기 위해 ActivityResultLauncher API를 사용하는 것을 권장합니다.

4-1. registerForActivityResult()와 ActivityResultContracts 사용

class MainActivity : AppCompatActivity() {

    private val pickImageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val data: Intent? = result.data
            // 결과 처리 로직
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pickImageButton = findViewById<Button>(R.id.pickImageButton)
        pickImageButton.setOnClickListener { openImagePicker() }
    }

    private fun openImagePicker() {
        val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
        pickImageLauncher.launch(intent)
    }
}

5. 통합 예제: 사진 공유 앱

이번에는 간단한 사진 공유 앱을 만들어보겠습니다. 사용자가 사진을 선택하면, 해당 사진을 다른 앱으로 공유할 수 있는 간단한 기능을 구현해봅시다.

class MainActivity : AppCompatActivity() {

    private val PICK_IMAGE_REQUEST = 1

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pickImageButton = findViewById<Button>(R.id.pickImageButton)
        pickImageButton.setOnClickListener { openImagePicker() }
    }

    private fun openImagePicker() {
        val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
        pickImageLauncher.launch(intent)
    }

    private val pickImageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val data: Intent? = result.data
            val selectedImageUri: Uri? = data?.data
            selectedImageUri?.let { shareImage(it) }
        }
    }

    private fun shareImage(imageUri: Uri) {
        val shareIntent = Intent(Intent.ACTION_SEND)
        shareIntent.type = "image/*"
        shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri)
        startActivity(Intent.createChooser(shareIntent, "Share image using"))
    }
}

마무리

이제 여러분은 화면 간 전환과 액티비티 생명주기에 대한 기본적인 개념을 이해하고 활용할 수 있게 되었습니다. 명시적, 암시적 인텐트를 활용하여 화면 간 전환을 구현하고, 데이터를 주고받는 방법을 배웠습니다. 다음에는 안드로이드에서 자주 사용되는 프래그먼트(Fragment)와 그 사용법에 대해 알아보도록 하겠습니다. 계속해서 흥미로운 Kotlin 코딩되세요! 🚀

728x90
반응형
LIST
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함