2012-02-17 3 views
30

그래서 빨리 그것은 안드로이드에서 Serializable 대신 Parcelable 사용하는 것이 좋습니다 알아요.안드로이드 Parcelable 및 Serializable

제 질문은 : Serializable 권한을 사용하는 것을 피할 수 없는가?

내가 직렬화 할 사용자 지정 개체가있는 경우,의는 사람 클래스 유형 parcel.write *() 지원이 포함되어 있기 때문에 나는 다음과 같은 클래스 정의이 parcelable가 쉽게 만들기

public class Person { 
    String name; 
    int Age; 
    ... 
    .... 
} 

가 있다고 가정 해 보자

public class PersonTwo { 
    MyCustomObj customObj; 
    String name; 
    int Age; 
    ... 
    .... 
} 

을 어떻게 파에 생각하고 : parcel.writeString와 Person 클래스는 다음과 같은 어떤 경우 지금 parcel.writeInt

는, 즉이 MyCustomObj 개체를? serializable을 다시 사용해야 할 필요가있는 것 같습니다. 하지만 다시, 나는 그것이 직렬화 가능을 사용하는 것이 천천히 생각하고, 우리는이 경우에 사용할 수밖에 없다.

이해가 안

나는이 경우 PersonTwo을 소포 얼마나

사람이 나를 알 수 있습니까?

+2

Serializable을 사용하는 것이 좋습니다. Nexus 5의 테스트 결과에 따르면 Parcelable보다 훨씬 빠릅니다. https://bitbucket.org/afrishman/androidserializationtest를 참조하십시오. 기억해야 할 중요한 점은 Serializable은 기본 설정에서만 느리다는 것입니다. 수동 직렬화를 사용하면 훨씬 더 빠릅니다. 자세한 내용은 위의 링크를 확인하십시오. – nucleo

답변

2

MyCustomObj를 분할 가능으로 만들어야합니다.

16

Ajay가 제공하는 링크는 찾고자하는 것과 정확히 일치합니다. 어떻게 할 수 있습니까? 그럼, 당신이 할 수있는 당신의 CustomObject1-Parcelable를 구현하고 그것을 위해 Parcelable 클래스를 생성 한 다음 모두 CustomObjects을 소포됩니다 다른 Parcelable 클래스 내부에 그것을 Parcel 해당 Parcelable 클래스를 사용할 수 있습니다.

public class CustomObject1 implements Parcelable { 

    // parcelable code CustomObject1 
} 

public class CustomObject2 implements Parcelable { 

    private CustomObject1 obj1; 

    // add CustomObject1 here with getter setter 
    // parcelable code for CustomObject2 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeParcelable(obj1, flags); 
    } 
    private void readFromParcel(Parcel in) { 
     obj1 = in.readParcelable(CustomObject1.class.getClassLoader()); 
    } 
    ............ 
} 
+2

고마워, 너와 아지를 대답으로 받아들이지 만, 내가 선택할 수있는 것 같아. 아무튼 감사 해요!! – user1118019

+1

네,이 사이트에 게재되어 있으며 어떻게 처리합니까? 모든 객체가 필요하고, parcelable하게 만드십시오. 루트 객체는 원시 객체 또는 문자열 유형을 포함 할 것이기 때문에 – jonney

-1

내가 Parcelable이 문제가되는 부분을 지적하게되었습니다. Android 4.3의 경우 데이터를 전달할 때 unmarhalling 예외가 발생합니다. Activities as Parcelable. Android 4.0, 4.2 또는 4.4에서는 정상적으로 작동합니다. 느린 경우에도 Serializable로 변경하면 작동합니다.

+0

글쎄, 내가 경험하고 logcat에서 볼 수있는 것입니다. – MartinC

+2

whe도 체크 아웃 할 수 있도록 코드를 추가하십시오 문제가 안드로이드 자체에있는 경우. – silverado

0

모든 복합 개체도 Parcelable이어야합니다. 개체를 건너 뛰고 writeToParcel 메서드를 사용하지 않으려는 경우