본문 바로가기
개발/Android

[Android] Intent로 데이터 전달 시 용량 제한

by tempus 2021. 9. 16.
반응형

어느 날, 오후 급하게 회사 메신저로 CS 측에서 문의가 왔습니다. 앱에서 특정 매장의 메뉴를 선택하는 과정에서 앱이 뻗어버린다는 것이었습니다.


so_sad
안돼...

처음에 디버그도 찍어보고 관리자 페이지의 데이터를 대조하면서 확인해도 뚜렷한 오류 로그가 나오지 않아서 굉장히 난감했습니다. 헤매다가 결국 찾았는데 바로 인텐트에 담아서 보내는 데이터의 사이즈가 문제였습니다.

 

찾아보니 인텐트에 데이터를 담을 때, 대략 500KB 정도가 넘어가면 앱이 Crash가 날 수 있다고 합니다.

확인해보니 상품들의 옵션들이 계속 추가되면서 넘길 수 있는 데이터의 한계를 넘어선 듯했습니다.

 

해결 방법을 찾아보니 Intent를 사용할 때 기본적인 정보만을 담고 더 많은 데이터를 Intent에 담아야 한다면 다음과 같은 방법을 고려해보라고 했습니다.

 

  • Data 를 file(임시) 로 저장하고 활용(Data가 큰 용량일 경우)
  • Data 를 Application Instance 에 저장
  • Data 를 singleton 에 저장

 

위의 예제를 실제로 어떻게 적용할지 코드로 구현해보았습니다.


🔍 file(내부 저장소)에 저장하고 활용

내부 저장소에 파일 저장 (경로는 data/data/패키지명/files/파일명으로 저장됩니다)

val jsonText = "blabla"

try {
    val file : FileOutputStream = openFileOutput("test.txt",MODE_PRIVATE)
    file.write(jsonText.toByteArray())
    file.close()
}catch (e : IOException){
    e.printStackTrace()
}

파일 데이터 가져오기

var data : String = ""
            try {
                val fileInputStream = openFileInput("test.txt")
                data = fileInputStream.read().toString()
                fileInputStream.close()
            }catch (e : IOException){
                e.printStackTrace()
            }

🔍 Application Instance 저장

class MasterApplication : Application() {
    var data : String = "test";

    init{
        instance = this
    }

    companion object{

        lateinit var instance : MasterApplication
        fun ApplicationContext() : Context{
            return instance.applicationContext
        }
    }
}

사용법

val intentData = MasterApplication.instance.data

🔍 Singleton으로 저장

간단하게 Kotlin Object를 이용해서 저장할 수 있습니다.

object Data{
    val jsonString : String? = null
}

사용법

val intentData = Data.jsonString

참조

반응형

댓글


loading