2010-12-26 3 views
2

인 텐트를 통해 다른 활동으로 전달하려는 오브젝트가 몇 개 있습니다. 그러나, 그들은 단지 읽히기 때문에 다른 객체의 얕은 복사본 일 필요가 있습니다 (그리고 수정 될지라도 원래의 활동으로 수정되기를 원할 것입니다). 객체의 모든 필드가 직렬화 가능하지는 않기 때문에 객체를 직렬화 가능하게 만들 때도 할 수 없습니다.안드로이드의 인 텐트에있는 오브젝트의 얕은 복사

또한, 동일한 문제를 해결할 수있는 것처럼 보이게 만듭니다. 물론, 일부 필드를 활성 객체로 추가 할 수있는 것처럼 보이지만 모든 것을 단순한 복사본으로 만들 수는 없습니다.

인 텐트에서 개체의 얕은 복사본을 만들 수있는 방법이 있습니까? 아니면 다른 매개 변수를 사용하여 일반적으로 java에서 매개 변수를 전달하는 것처럼 다른 방법으로 데이터의 얕은 복사본을 다른 활동으로 전달할 수 있습니까? 고맙습니다.

답변

1

JesusFreke는 인 텐트를 통해 참조 (포인터)를 객체에 전달할 수 없다는 점에서 정확합니다. 인 텐트는 데이터에 대한 참조가 아닌 일련 화 된 데이터를 의미합니다. 그러나 종종 메모리 누수의 원인이기 때문에 정적지도 기법을 사용하는 것이 좋습니다. 대신 android.app.Application의 하위 클래스를 만들고이를 사용하여 활동간에 공유해야하는 데이터 구조에 대한 참조를 저장하는 것이 좋습니다.

+0

감사합니다. 마침내 객체의 ID를 전달하고 데이터베이스에서 다시 쿼리합니다. 유용한 정보를 가져 주셔서 감사합니다. 슬픈 포인터 주위를 통과하는 (안정적인) 방법이 없습니다. –

1

의도를 보내면 인 텐트와 관련된 모든 데이터가 프로세스 경계를 ​​넘어 마샬링되어야합니다. 이것이 일어날 수있는 유일한 방법은 객체가 parcelable 인 경우입니다.

그러나 새 인 텐트를 보내는 코드가 의도에 의해 시작된 활동과 동일한 프로세스에 있으면 정적 맵을 만들어 보내려는 데이터를 보유 할 수 있습니다 새 액티비티를 생성 한 다음, 인 텐트의 데이터에 키를 전달하여 새 액티비티가 맵에서 데이터를 조회 할 수 있도록합니다.

그러나 이러한 유형의 접근법에 대한 유일한 관심은 의도를 보내고 새로운 활동이 시작되기 전에 프로세스가 종료 될 수 있다는 것입니다. 그런 다음 새로운 의도로 프로세스가 다시 시작되지만 맵에 저장 한 데이터는 완전히 사라졌습니다. 나는 이것이 매우 드물게 발생하는 것 같아요.

관련 문제