Android는 Parcel 유형을 제공합니다. 데이터를 캡슐화하는 컨테이너로 사용됩니다. 캡슐화된 데이터는 Intent 또는 IPC를 통해 전달될 수 있습니다. 기본 유형 외에도 Parcelable 인터페이스를 구현하는 클래스만 Parcel에 넣을 수 있습니다.
Parcelable 구현의 핵심 사항: 세 가지를 구현해야 합니다.
1) writeToParcel 메소드. 이 메서드는 클래스의 데이터를 외부에서 제공되는 Parcel에 씁니다. 다음과 같이 선언됩니다.
writeToParcel(Parcel dest, int 플래그) 특정 매개변수 의미는 javadoc를 참조하세요.
2) explainContents 메소드. 무슨 용도인지 모르겠습니다. 어쨌든 그냥 0을 반환하면 됩니다.
3) 정적 Parcelable.Creator 인터페이스. 이 인터페이스에는 두 가지 방법이 있습니다.
createFromParcel(Parcel in)은 클래스의 인스턴스를 생성하는 기능을 구현합니다.
newArray(int size)는 T 유형과 길이 크기의 배열을 생성합니다. 단 한 문장(return new T[size])이면 충분합니다. 이 메서드는 외부 클래스에서 이 클래스의 배열을 역직렬화하는 데 사용되는 것으로 추정됩니다.
테스트를 위한 정보 수신 활동:
import android.app.Activity; import android.os.Bundle; import android.os.Parcelable; public class Test extends Activity { @Override public void onCreate(Bundle saveInstanceState) ; setContentView(R.layout.main); 인텐트 i = getIntent(); i.getParcelableExtra("yes"); System.out.println("---->"+p.name); System.out.println("---->"+p.map.size()) ; } }
전송된 활동:
import java.util.HashMap; import android.content.Intent; import android.os.Bundle; public class TestNew extends Activity { @Override public void onCreate(Bundle selectedInstanceState) ; setContentView(R.layout.main); 인텐트 인텐트 = new Intent(); Person p = new Person(); HashMap<String,String>(); p.map.put("yes", "ido");intent.putExtra("yes", p); .class); 시작액티비티(의도) } }
Parcelable 구현 클래스:
import java.util.HashMap; import android.os.Parcelable; public class Person은 Parcelable을 구현합니다. { public HashMap<String,String> map = new HashMap<String,String> (); @Override public int explainContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeMap(map); dest.writeString(name); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //생성자 재정의 @Override public Person createFromParcel(Parcel source) 개인 p = new Person(); p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; } @Override public Person[] newArray(int size) { // TODO 자동 생성 메서드 return null;