Parcelables
을 사용하여 활동 간 정보를 공유하는 동안 문제가 발생했습니다. 구현에는 문제가 없지만 일부 휴대폰에서는 문제가 발생합니다. 내부에 저장된 정보는 지나치게 많습니다. 이것에 의해, 오브젝트가 비 정렬 화되면 (자), MemoryExceptions가 슬로우됩니다. 나는 문서 안에 어떤 종류의 메모리 제한도 찾을 수 없었다. 알아내는 가장 좋은 방법은 주어진 정보가 Parcel
에 쓰여지기 전에 Parcel
으로 /로부터 읽거나 쓸 수 없을 정도로 작은 경우입니다. Parcelable
을 쓰려면?소포에 몇 개의 데이터를 저장할 수 있습니까?
답변
나는 < = Integer.MAX_VALUE를가
/**
* Returns the total amount of data contained in the parcel.
*/
public final native int dataSize();
귀하는 소포에 어떤 유형의 데이터를 저장하고 있습니까? 나는 당신이 엉망인 경우 (즉, 같은 방식으로 데이터를 저장하고 검색하지 않도록주의해야한다.) 결국, 이상한 결과를 얻게 될 것이며, 일부는 심지어 애플리케이션이 OutOfMemoryException을 던질 수도있다.
TLDR; 같은 순서로 & 소포에 쓰십시오.
문제가 될 수 없습니다 것 같아요! 이 메커니즘은 대부분의 휴대 전화에서 작동하지만 일부 기기에서는 실패합니다 (일반적으로 HTC 기기) –
기기에서 일관되게 재생할 수 있습니까? – ninetwozero
예. 'onSavedInstanceState'에 액티비티 상태를 저장하고이 번들 안에 내 Parcelable을 삽입하려고하면 오류가 발생합니다. 저도 Parcelable을 Activity간에 전달하려고하면 발생합니다. 삼성 Nexus S는 아무런 예외없이 HTC Desire가 알지 못하지만 –
문자열 "Foo"를 소포하면'dataSize()'의 예상 결과는 무엇입니까? 그것을 추가하기 전에 추가되는 금액을 계산하는 방법? –
int length = "Foo".getBytes(). length; – nyjsl