Android에서 직접 Intent putExtra () 대신 Bundle을 사용할 때의 이점


79

내 안드로이드 응용 프로그램에서 나는 항상 어떤 수의 값을 new에 전달하기 위해 클래스의 직접 putExtra()함수를 사용 Intent하고 Activity있습니다.
이렇게 :

Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);

나는 Bundle안드로이드 에 대해 알고 있으며 사람들이 Bundle값을 new에 전달하는 데 사용 하는 것을 보았습니다 Activity.
이렇게 :

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

여기에 두 가지 의심이 있습니다. 값을 직접 넣어 new 에 전달할 수 있다면
왜 사용해야 합니까? 직접 대신 사용 하는 것의 장점은 무엇입니까 ?BundleActivityIntent
BundleIntent putExtra()

답변:


65

별 차이가 없다. 추가 번들을 사용하는 코드는 약간 더 무겁고 (실용적인 응용 프로그램에서는 차이가 없음) 관리하기가 약간 더 쉽고 일반적입니다.

언젠가 인 텐트 내부에 정보를 보내기 전에 데이터를 데이터베이스에 직렬화하려는 경우 직렬화하고 인 텐트에 추가 한 다음 PendingBundle에 피드 할 수있는 번들을 갖는 것이 조금 더 깔끔 할 것입니다. 하나의 개체로.

[최신 정보]

설명 (다른 답변으로 인해).

Extras 각 Intent가 휴대 할 수있는 추가 번들이므로 번들을 사용하거나 사용하지 않는 것 사이에 대안이 없습니다. 어느 쪽이든 번들을 사용하고 있습니다.

처음 사용할 때 Intent 내부 putExtramExtras번들이 초기화되고 다음의 모든 putExtra가 여기에 위임됩니다. 번들 자체는 사용자가 액세스 할 수 없습니다 (특정 종류의 버그를 피하기 위해 의도적으로 설계된 것입니다).

putExtras 번들을 Intent에 넣지 않습니다 . 대신 현재 인 텐트 번들로 복사합니다 (또는에서와 같이 생성 putExtra). 이것이 약간 더 무거운 이유입니다 (하나가 아닌 두 개의 번들이 있고 복사 비용을 지불합니다).

핵심은-를 사용하는 경우 putExtras여전히 인 텐트 내부의 실제 번들에 액세스 할 수 없습니다. 그러나-당신은 그것으로 할 수있는 다른 무엇이든에 대한 사본을 가지고 있습니다. (유사한 인 텐트를 많이 보내는 경우) 다른 인 텐트로 복사하기 위해 주위를 유지하는 것과 같습니다.


다음과 같은 코드를 사용하는지 알려주세요 Intent intent = new Intent (this, MyActivity.class); intent.putExtra (ID_EXTRA1, "1"); 번들 추가 = new Bundle (); extras.putString ( "EXTRA_USERNAME", "my_username"); extras.putString ( "EXTRA_PASSWORD", "my_password"); intent.putExtras (extras); startActivity (intent); ID_EXTRA1에 액세스하려면 어떻게합니까
Vishal Vijay

@VishalVijay getExtras를 호출하여 추가 번들 (원본이 아님)의 사본을 얻을 수 있습니다. 주의해서 null을 반환 할 수 있습니다.
fdreger 2013 년

그래서 나는 새로운 활동 리그에서 ID_EXTRA1과 엑스트라 (번들)를 얻을 수 있습니다.
Vishal Vijay 2013 년

죄송합니다.이 질문에 대한 답을 정확히 알 수는 없지만 ValueObjects 데이터를 편집하는 유일한 목적이있는 경우 정적 데이터에서 사용할 VO의 인덱스를 전달하는 것뿐입니다. 자원. 필수이므로 startActivity(intent, options)또는 intent.putExtra()? 둘 다 할 수 있다는 것을 알고 있지만 모범 사례를 생각하고 있습니까? 나는 보통 onCreate에 전달 된 번들을 만지지 않지만 경험이 없어서 의견을 구합니다.
WORMSS

putExtras (bundle)은 원래 인 텐트에 위임하지 않습니다. 원래 의도에는 번들 인 추가 항목이 있습니다.
Lena Bru

17

추가 장점 : 데이터가 Bundle에 들어가면 여러 인 텐트를 통해 동일한 데이터를 보낼 수 있습니다. (이 경우에만 여러 인 텐트가 전송됩니다).


6

번들은 생성 / 읽기를 더 쉽게 분리 할 수 ​​있기 때문에 멋지므로 번들을 처리하는 코드와 UI 코드를 분리 할 수 ​​있습니다.

대부분의 경우 가능한 가장 적은 양의 데이터를 전송하기를 원하므로 쓸모가 없습니다 (보통 문자열 몇 개, ID ...).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.