2017-10-27 15 views
1

사망 :단검 2 및 활동 내가 Dagger2 사용하여 응용 프로그램 구성 요소는 응용 프로그램의에서 onCreate에서 인스턴스화를

@Override 
public void onCreate() { 
    super.onCreate(); 
    mComponent = DaggerApplicationComponent.builder() 
      .applicationModule(new ApplicationModule(this)) 
      .build(); 
} 
단검이 사용하는 데이터를 저장하는 클래스이다 "CacheRepository"을 관리하고

사용자가 앱에서

문제점 : 시스템에서 응용 프로그램을 종료하면 응용 프로그램이 삭제되고 구성 요소의 인스턴스가 손실됩니다. 하지만 앱을 다시 시작하면 앱이 캐시에서 데이터를 가져 오는 것을 포함하여 이전 상태로 복원하려고 시도합니다. 이제는 다시 초기화되었습니다. 따라서 데이터가 null 인 경우 앱이 다운됩니다.

어떻게 방지 할 수 있습니까?

쉬운 옵션은 시스템에 의해 종료 될 때 앱을 처음부터 다시 시작하도록하는 것이지만 그렇게 할 해결책을 찾지 못했습니다.

다른 솔루션은 SharedPreferences (또는 모든 종류의 저장소)에 캐시를 저장하는 것이지만 캐시의 대부분의 데이터가 일시적이므로이 솔루션이 마음에 들지 않아 앱이 더 복잡해집니다.

+1

'어떻게 방지 할 수 있습니까? '중요한 정보를 디스크 ('SharedPreferences', sqlite, 일반 파일)에 저장하거나'Bundle'에 저장해야합니다. – azizbekian

+0

Realm, sqllite 등을 사용하여 데이터를 로컬에서 유지할 수 있습니다. 또 다른 솔루션은 단검 CacheRepository의 Custom Scopes를 조사하는 것입니다. – willermo

+0

@willermo 네,하지만 이건 제가 피하고 싶습니다. 구성 요소의 데이터는 앱이 살아있을 때만 사용해야하고 처음부터 앱을 다시 시작할 때 필요하지 않습니다. – Eselfar

답변

0

나는 this answer from @David Wasser:

응용 프로그램이 사망 한 경우 아이디어는 시작 (예를 들면되는 SplashScreen)에서 다시 시작 응용 프로그램을 강제하는 것입니다에 솔루션 덕분에 발견 한 생각 .

모든 활동의 onCreate()에서 "app initialization"이 public static 변수 또는 singleton을 사용하여 수행되었는지 확인하십시오. 초기화가 완료되지 않은 경우 앱의 프로세스가 종료되었다가 다시 생성되고 사용자를 루트 액티비티로 리디렉션하거나 (즉, 앱을 처음부터 다시 시작해야 함) onCreate() 함수에서 즉시 초기화해야합니다. 활동의

아마도 가장 좋은 해결책은 아니지만 최소한 간단합니다. 또한 데이터를 손상 시키거나 응용 프로그램 수명 동안 만 보관하려는 내용을 저장할 위험이 없습니다.

0

Realm, sqllite 등을 사용하여 IE에서 로컬로 데이터를 유지할 수 있습니다. 또 다른 솔루션은 단검 CacheRepository의 Custom Scopes를 조사하는 것입니다.

대거에서는 범위가 존재하는 한 클래스의 단일 인스턴스를 유지하는 것에 대해 메커니즘이 신경을 쓰고 있습니다. 실제로는 @ApplicationScope에서 범위가 지정된 인스턴스가 Application 개체만큼 오래 존재 함을 의미합니다. @ActivityScope는 Activity가 존재하는 한 참조를 유지합니다 (예 :이 활동에서 호스팅 된 모든 단편간에 모든 클래스의 단일 인스턴스를 공유 할 수 있음).

자료 : Dependency injection with Dagger 2 - Custom scopes

+0

네, 제 문제입니다. 응용 프로그램이 시스템에 의해 종료되면 (예 : 메모리가 부족한 경우) Application 인스턴스가 삭제됩니다. 결과적으로 구성 요소가 릴리스됩니다. 따라서 앱이 다시 시작되면 이전 상태로 복원하려고 시도합니다.그러나 응용 프로그램이 파괴 되었기 때문에 구성 요소도 다시 만들어졌습니다. 따라서 이전 구성 요소의 모든 데이터가 손실되고 복원 된 활동이 null 데이터를 가져오고 앱이 다운됩니다. – Eselfar

+0

유일한 옵션은 데이터를 로컬에서 유지하는 것입니다. – willermo