2016-09-16 3 views
0

하나의 액티비티에서 다른 액티비티로 복잡한 객체를 보내려고합니다. 따라서이 객체의 일부 필드는 시스템 클래스이고 기본적으로 비 직렬화 가능하기 때문에이 복잡한 객체를 직렬화 할 수 없습니다. 그래서 "MyIntent"라는 사용자 정의 클래스를 android.content.Intent에서 상속 받고 싶습니다.이 방법으로 모든 유형의 객체를 사용자 정의 인 텐트에 넣을 수 있습니다. 하지만 두 번째 활동에서 getIntent() 메서드는 MyIntent 인스턴스가 아닌 android.content.Intent 인스턴스를 반환합니다. 내가 왜 안드로이드를 구현하지 않았는지 이해하지 못한다 .content.Intent class is right.Android custom 인 텐트 클래스

public class MyIntent extends Intent 
{ 
} 

//starting activity 
MyIntent intent = new MyIntent(); 
intent.setClass(context, SecondActivity.class); 
context.startActivity(intent); 


//inside of onCreate() of SecondActivity 
Intent i = getIntent(); 
i instanceof MyIntent = false 
+0

'MyIntent i = (MyIntent) getIntent()' –

+0

Anton, 시스템 클래스를 보낼 필요는 없지만 보내려는 클래스는 일부 시스템 클래스와 많이 결합되어 있습니다. –

답변

1

startActivity()는 시작 활동이 같은 응용 프로그램과 동일한 프로세스에있는 경우에도, 프로세스 간 통신을 포함한다. 안드로이드는 하위 클래스를 무시합니다. startActivity() 요청을 처리하는 OS 프로세스는 하위 클래스를 사용할 수 없기 때문에 하위 클래스를 사용할 수 없으며 OS 프로세스가 사용자의 응용 프로그램이 아니기 때문입니다. 그리고 프로세스를 다시 시작하라는 요청을 전달하는 IPC는 하위 클래스에 대해 아무 것도 모릅니다.

다음 중 하나를

  • 은 모두 활동이 작동 할 수있는 하나 개의 활동 (예를 들어, 두 개의 조각을 사용하여), 또는

  • 를 사용하여 단일 데이터 관리자의 일종으로 이러한 결합

+0

고마워, 나는 이해하고 두 번째 방법 (싱글 톤 사용)은 나를 위해 일했다. –

+0

@TamerlanRustambayli : 싱글 톤은 의도적 인 메모리 누수이므로 거기에서 사용하는 메모리 양을 추적해야합니다. – CommonsWare