2014-02-18 4 views
0

하나의 조각에서 다른 조각으로 데이터를 전달하기 위해 setArgument()/getArgument()를 사용합니다.Android 번들은 공유 메모리입니까?

Bundle.putParcelableArrayList(), 을 사용하여 ArrayList를 묶음으로 저장하고 데이터를 생성하고 가져 오는 데이터를 메모리에 같게 만듭니다.

일반적으로 Parcelable 소스와 재생성 된 (CREATOR를 통해) 인스턴스는 다른 인스턴스이지만 생각은 같습니다.

번들이 메모리를 공유하는 경우 왜 번들에는 다양한 데이터 유형을 지원할 수있는 여러 가지 방법이 있습니까? 번들에서 Object 인스턴스를 전달하거나 generic을 사용하지 않는 이유는 무엇입니까?

답변

0

왜 번들에는 다양한 데이터 유형을 지원할 수있는 여러 가지 방법이 있습니다 .- 왜 그냥 Object 인스턴스를 전달하거나 번들에서 generic을 사용하지 않는 것이 좋을까요? Bundle 클래스 objects를 전달하는 단 1 방법을 가지고한다면 그 혼란을 일으킬 수 있기 때문에

, 그건 끔찍한 일 것이다. 이러한 다양한 데이터 유형 메소드를 사용하면 프로그래머가 원하는 인수에 대해 확신 할 수 있습니다.이 경우 4 명의 프로그래머가 프로젝트에서 작업하고 1 명의 프로그래머가 Bundle 인스턴스에 객체를 넣으려는 경우를 상상해보십시오 (이 경우 왜 Bundle있어

Bundle bundle = getArguments(); 
Cat variable = bundle.getObject("animal"); //This will cause an Exception, because the  argument it returned isn't a Cat class. 

그 예이 그 가치를 얻을하려는 번들 클래스 개체를 넣어 만 1 방법 (다형성)) 다음

Bundle bundle = new Bundle(); 
bundle.putObject("animal",new Dog()); 

그리고 프로그래머 이후 하나를 가지고 상상 할 클래스에는 이런 종류의 오류를 피하기위한 메소드가 있습니다.

이제 다음 대답은 번들에 제네릭

또는 사용하는 것입니다?

제네릭은 Casting의 사용을 피하고 위에 설명 된 문제를 피하기 위해 Collection Framework를 사용하는 프로그래머를 돕기 위해 만들어졌습니다. 가 아닌 다음 데이터가 공유 메모리를 통해 직접 전달되기 때문에이 시간은 당신이 객체를 전달하면

0
public final class Bundle implements Parcelable, Cloneable {...} 

번들 Parcelable을 구현, 자동으로 번들 여부를 식별 시스템은 프로세스 간 및 교차 과정 얻을 개체는 실제로 동일하지만 교차 프로세스 인 경우 Parcelable 인터페이스가 교차 프로세스에서 역할을 수행하면 시스템에서 Parcelable의 writeToParcel 메서드를 호출하고 모든 데이터를 바이트로 변환 한 다음 다른 개체로 전달합니다 프로세스, Parcelable Creator 인터페이스를 통해 수신 한 다음 다른 프로세스를 통해 데이터를 복원하는 경우 Creator에 의한 데이터 복원은 동일한 인스턴스가 아닙니다. 거기에 왜 그렇게 많은 방법으로 번들, 대신 직접 사용할 수있는 모든 유형의 수있는 Parcelable, 그 다음 번들 실현 된 Parcelable, 또한 그가 번들로 데이터를 전달해야합니다 필요하기 때문에, putObject (Object), getObject()를 사용하여, 요구 사항도 지원됩니다.

관련 문제