게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안드로이드 Parcelable인터페이스 공부중 궁금한점이 있어요
게시물ID : programmer_21603짧은주소 복사하기
작성자 : ♥Dara♥
추천 : 0
조회수 : 347회
댓글수 : 1개
등록시간 : 2017/10/31 10:28:13
옵션
  • 본인삭제금지
Do it 안드로이드 앱 프로그래밍 책을 보면서 공부중인데요

MainActivity.java 에서는 객체를 인텐트로 전달하기 위해서
public static final String KEY_SIMPLE_DATA = "data";
SimpleData data = new SimpleData(100, "Hello Android!");
intent.putExtra(KEY_SIMPLE_DATA, data);
이렇게 선언했고

전달될 SimpleData.java는
public class SimpleData implements Parcelable {
매개변수 2개를 받아 변수를 초기화하는 생성자와
// 숫자 데이터
int number;

// 문자열 데이터
String message;

/**
* 데이터 2개를 이용하여 초기화하는 생성자
*
* @param num
* @param msg
*/
public SimpleData(int num, String msg) {
Log.d("SimpleData클래스", "SimpleData() 데이터 2개 초기화 생성자 실행");
number = num;
message = msg;
}

이렇게 Parcelable 인터페이스를 상속받아서 

Parcel객체를 이용해 초기화하는 생성자 그리고
/**
* 다른 Parcel 객체를 이용해 초기화하는 생성자
*
* @param src
*/
public SimpleData(Parcel src) {
Log.d("SimpleData클래스", "SimpleData() Parcel객체 초기화 생성자 실행");
number = src.readInt();
message = src.readString();
}
정의된 메소드를 2개를 작성해주고
public int describeContents() {
Log.d("SimpleData클래스", "descriibeContents() 실행");
return 0;
}
/**
* 데이터를 Parcel 객체로 쓰기
*/
public void writeToParcel(Parcel dest, int flags) {
Log.d("SimpleData클래스", "writeToParcel() 실행");
dest.writeInt(number);
dest.writeString(message);
}
내부 CREATOR 객체생성을 위해
public static final Creator CREATOR = new Creator() {

public SimpleData createFromParcel(Parcel in) {
return new SimpleData(in);
}

public SimpleData[] newArray(int size) {
return new SimpleData[size];
}

};
이렇게 작성된 상태인데요

실행은 정상적으로 되는데
로그를 찍어보니까
실행순서가

1. SimpleData() 데이터 2개 초기화 생성자 실행
2. writeToParcel() 실행
3. createFromParcel() 실행
4. SimpleData() Parcel객체 초기화 생성자 실행

이렇게 처리가 되는데
1번이야 MainActivity.java에서 매개변수 2개로 new를 했으니까 실행되는건 아는데
나머지 2,3,4는 따로 호출한 부분은 없는데 왜 실행되는지 책을봐도 이해가 잘안가네요
알려주시면 감사하겠습니다
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호