programing

Android에서 Serializable을 사용하고 있습니까?

goodcopy 2021. 1. 17. 11:55
반응형

Android에서 Serializable을 사용하고 있습니까?


나는 Serializable보다 Parcelable의 속도를 찬양하는 많은 게시물과 기사를 읽었습니다. 나는 인 텐트를 통해 활동간에 데이터를 전달하기 위해 잠시 두 가지를 사용해 왔지만 둘 사이를 전환 할 때 속도 차이를 아직 느끼지 못했습니다. 전송해야하는 일반적인 데이터 양은 각각 2 ~ 5 개의 필드가있는 5 ~ 15 개의 중첩 된 개체입니다.

양도 할 수 있어야하는 약 30 개의 클래스가 있기 때문에 Parcelable을 구현하려면 유지 관리 시간을 추가하는 많은 상용구 코드가 필요합니다. 나의 현재 요구 사항 중 하나는 컴파일 된 코드가 가능한 한 작아야한다는 것입니다. Parcelable보다 Serializable을 사용하여 약간의 공간을 절약 할 수있을 것으로 기대합니다.

Parcelable을 사용해야합니까, 아니면 그렇게 적은 양의 데이터에 대해 Serializable을 통해 사용할 이유가 없습니까? 아니면 Serializable을 사용하지 말아야하는 또 다른 이유가 있습니까?


메모리 내 사용의 경우 Parcelable은 Serializable보다 훨씬 낫습니다. Serializable을 사용하지 않는 것이 좋습니다.

디스크에 저장 될 데이터에는 Parcelable을 사용할 수 없지만 (일이 변경 될 때 데이터 일관성에 대한 좋은 보장이 없기 때문에) Serializable은 거기에서도 사용하지 않을 것을 강력히 촉구 할 정도로 느립니다. 데이터를 직접 작성하는 것이 좋습니다.

또한 Serializable의 성능 문제 중 하나는 많은 임시 개체를 통해 회전이 종료되어 앱에서 많은 GC 활동을 유발한다는 것입니다. 꽤 끔찍합니다. :}


직렬화를 계속 사용하십시오. 직렬화가 매우 느리고 비효율적이라고 말하는 온라인 사용자가 많이있을 것입니다. 맞아요. 그러나 컴퓨터 프로그래머로서 절대하고 싶지 않은 한 가지는 성능에 대해 절대적으로 언급하는 것입니다.

직렬화로 인해 프로그램 속도가 느려지는지 자문 해보십시오. 활동에서 활동으로 이동할 때 눈치 채 셨나요? 저장 / 불러 오기를 알 수 있습니까? 그렇지 않다면 괜찮습니다. 많은 수동 직렬화 코드로 이동할 때 더 작은 공간을 얻지 못하므로 이점이 없습니다. 그렇다면 100 배 더 느리다는 것이 0.1ms 대신 10ms를 의미한다면 대안보다 100 배 더 느리면 어떨까요? 당신도 볼 수 없을 거에요 누가 신경 쓰나요? 그리고 성능면에서 눈에 띄는 차이가 없는데 왜 30 개의 클래스에 대한 수동 직렬화를 작성하는 데 엄청난 노력을 기울이겠습니까?


모든 사람들은 Parcelable이 Serializable보다 낫고 빠르다고 맹목적으로 말하지만 아무도 증명으로 그의 진술을 뒷받침하지 않았습니다. 나는 이것을 직접 테스트하기로 결정했고 매우 흥미로운 결과를 얻었습니다.

일반적인 Android 기기 (올바른 경우)에서 일반적인 Java 직렬화는 쓰기의 경우 Parcelable보다 약 3.6 배, 읽기의 경우 약 1.6 배 빠릅니다.

내 테스트 프로젝트는 https://bitbucket.org/afrishman/androidserializationtest 에서 확인할 수 있습니다.


JSON을 사용하고 데이터를 문자열로 전달하는 직렬화를 고려한 사람이 있습니까? GSON과 Jackson은 Parcelable과 Serializable의 경쟁자가 될만큼 충분히 효율적이어야합니다.

참조 URL : https://stackoverflow.com/questions/3611843/is-using-serializable-in-android-bad

반응형