Android

[안드로이드/데이터 관리] Application Class

gangmini 2023. 4. 29. 00:27
반응형

Application Class

  • 앱에 단 하나만 지정해 사용할 수 있는 객체
  • 같은 안드 앱이라면 어디서든 주소값을 가져올 수 있음 -> 다양한 요소에서(화면에서) 공통적으로 사용하는 데이터를 관리 (데이터를 전달~전달~전달 하는 번거로움 해소)
  • 영구적 저장은 X
  • Application을 상속받아 클래스를 만들고, Manifest에 등록해 사용
class AppClass : Application() {

    var value1 = 0
    var value2 = ""

    fun method1() {
        Log.d("test", "method1을 호출하겠습니다.")

    }

}

Manifest에 AppClass 등록

class MainActivity : AppCompatActivity() {

    private lateinit var binding:ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) // 뷰바인딩 객체
        val view = binding.root //뷰바인딩을 통해 레이아웃과 뷰가 결합 -> .root 를 통해 View 객체만를 뽑아내는(?)
        setContentView(view)

        binding.button.setOnClickListener {

            val app = application as AppClass// application 객체 얻어옴
            app.method1()
            app.value1 = 100
            app.value2 = "hello"

            val intent = Intent(this, SecondActivity::class.java)
            //startActivityForResult(intent, 0) //구버전
            activityResultLauncher.launch(intent)


        }
    }
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        val app = application as AppClass// application 객체 얻어옴
        binding.textView.text = "value1 : ${app.value1}\n"
        binding.textView.append( "value2 : ${app.value2}")
    }

    //구버전
    private val activityResultLauncher : ActivityResultLauncher<Intent> =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult())
        {
            val app = application as AppClass// application 객체 얻어옴
            binding.textView.text = "value1 : ${app.value1}\n"
            binding.textView.append( "value2 : ${app.value2}")
        }
}
반응형