5

액티비티간에 정보를 전달하고 번들에 추가하거나 싱글 톤 클래스를 사용하여이 데이터를 저장하고 액세스하는 것이 더 나은 방법인지 궁금 할 것입니다. 나는 과거에 다양한 안드로이드 프로젝트를 위해 두 가지를 모두 사용했지만 지금은 훨씬 더 큰 규모의 안드로이드 프로젝트를 작업 중이므로 처음부터 제대로 작업하는 것을 선호합니다.Android는 영구 정보를 번들로 전달하거나 싱글 톤 패턴을 사용합니까?

내 응용 프로그램은 사용자를 인증 한 다음 사용자의 ID를 기반으로 다양한 쿼리를 수행해야합니다. 액티비티 간의 커플 링을 최소화하기 위해 번들에 ID를 추가 한 다음 필요로하는 정보에 대한 각 액티비티 쿼리에 최선을 다할 것이라고 생각했습니다. 그러나 응답 성을 높이기 위해 필자는 지속적 정보를 저장하는 싱글 톤 클래스를 사용하여 필요한 것보다 많은 쿼리를 방지하는 방향으로 기울이고있었습니다.

답변

7

개인적으로, 앱의 상태를 저장하고 다양한 활동간에 데이터를 공유하기 위해 Application 확장자를 개인적으로 만듭니다. Application은 전체 앱의 컨텍스트 역할을하며 Android는 앱 전체에 하나의 인스턴스 만 항상 존재 함을 보장합니다. 따라서 자신의 싱글 톤을 정의하는 것과 비슷하지만, Application을 사용하면 Android에서 공유 데이터의 수명주기를 제어하고 기본적으로 메모리 관리를 수행 할 수 있습니다.

Here are some more details. 이 경로를 따라 가면 응용 프로그램 확장에 getter/setter (또는 기타) 메서드를 추가하여 데이터를 저장/검색하고 작업을 수행 할 수 있습니다. 특히, 후자는 Bundle을 사용하여 활동 간을왔다 갔다하면서 관리 (그리고 일관성 유지)하는 것이 상당히 고통 스러울 수 있습니다. 액티비티 플로우 의 이웃 인 하나 또는 두 개의 장소에서만 데이터가 필요한 경우 Bundle 만 사용하면 복잡한 작업을 실행할 필요가 없습니다.

+0

감사합니다. MH가 확실히 경로로 보입니다. –

+0

죄송합니다.이 응답을 올바른 답으로 표시하지 않았습니다. –

+1

응용 프로그램이이 영구 정보의 상태를 복원 할 때 제안 사항이 있습니다. 이 데이터를 저장하는 콜백이 없으므로 SharedPreference에 쓰기 만하면된다. –

0

전달 번들은 지루한 작업입니다. 호출 된 활동의 값을 사용하지 않더라도 값이 손실되지 않도록 활동의 모든 변경 사항에 대해 번들을 전달해야합니다.

1

bunlde를 통해 활동간에 데이터를 전달하는 유일한 경우는 잠시 동안 액세스 할 필요가없는 경우입니다 (즉, 호출 활동에서 한 번만 사용하려는 자원의 resID 등) . 또한 응답 성의 차이가 매우 미미하므로 문제가되지 않아야한다고 생각합니다. 싱글 톤 접근 방식을 제안합니다

1

더 나은 방법은 SharedPreferences를 사용하여 유지하고 재사용해야하는 userId를 유지하는 것입니다. 물론 싱글 톤 접근법이나 Application 클래스를 사용할 수도 있지만, 응용 프로그램이 종료 된 후에는 데이터가 손실됩니다.

0

싱글 톤 패턴에는 약간의 나쁜 결과가 있습니다. 예 : 주 활동에서 보조 활동을 호출합니다. 전화 통화로 작업이 중단되었습니다. 전화 통화가 끝난 후 Android는 화면에 보조 활동을 가져 오려고합니다. 여기에 내 악몽 - 많은 사용자가 예외에 대한 불만 - Google은 나를 내 싱글 톤에서 NULL 포인터를보고했다. 따라서 싱글 톤뿐만 아니라 싱글 톤 내부의 모든 데이터도 싱글 톤이어야합니다. 이 착각은 매우 복잡해졌습니다 : (