Android Application 클래스를 사용하여 데이터 유지
나는 응용 프로그램에 대해 다소 많은 양의 데이터가 필요한 상당히 복잡한 Android 응용 프로그램을 만들고 있습니다 (총 500KB라고 말하면 모바일 장치의 경우이 크기입니까?). 내가 알 수 있듯이 (활동에서보다 정확하게) 응용 프로그램의 방향 변경은 활동을 완전히 파괴하고 재생시킵니다. 내 연구 결과에 따르면 Application 클래스는 동일한 수명주기를 갖지 않습니다 (즉, 모든 의도와 목적을 위해 항상 인스턴스화됩니다). 상태 정보를 응용 프로그램 클래스 내부에 저장 한 다음 Activity에서 참조하는 것이 합리적입니까, 아니면 일반적으로 모바일 장치의 메모리 제한으로 인해 "허용 가능한"방법이 아닌가요? 이 주제에 대한 조언을 정말 감사합니다. 감사!
500kb가 그렇게 큰 일이라고 생각하지 않습니다.
당신이 묘사 한 것은 정확히 활동에서 데이터 손실 문제를 해결하는 방법입니다. 나는 Application 클래스에서 글로벌 싱글 톤을 만들었고 내가 사용한 활동에서 액세스 할 수있었습니다.
Global Singleton이 많이 사용될 경우 데이터를 전달할 수 있습니다.
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
그런 다음 다음을 수행하여 활동에서 호출하십시오.
YourApplication appState = ((YourApplication)this.getApplication());
appState.data.UseAGetterOrSetterHere(); // Do whatever you need to with the data here.
나는 그것을 논의 내 블로그 게시물에 여기 섹션에서, "글로벌 싱글."
Application
실례를 믿는 사람들 은 잘못입니다. 처음 Application
에는 전체 앱 프로세스가 존재 하는 한 존재하는 것처럼 보일 수 있지만 이것은 잘못된 가정입니다.
OS는 필요에 따라 프로세스를 종료 할 수 있습니다. 모든 프로세스는 문서에 지정된 5 가지 수준의 "킬킬 (killability)"로 나뉩니다 .
예를 들어, 사용자가 전화에 응답하여 앱이 백그라운드로 이동하면 RAM 상태에 따라 OS가 프로세스를 종료하거나 프로세스에서 Application
인스턴스를 파괴하지 않을 수 있습니다. .
더 좋은 방법은 데이터를 내부 저장소 파일 에 유지 한 다음 활동이 다시 시작될 때 읽는 것입니다.
최신 정보:
부정적인 의견이 많았으므로 이제 설명을 추가해야합니다. :) 처음에는 상태가 앱에 실제로 중요하다는 잘못된 가정을 사용했습니다. 그러나 앱이 정상 상태 인 경우가 간혹 상태가 손실되는 경우 (다시 읽기 / 다시 다운로드되는 일부 이미지 일 수 있음)의 멤버로 유지해도됩니다 Application
.
액티비티 외부의 "Global Singleton"에 액세스하고 Context
관련 개체를 모두 통과 하여 싱글 톤을 얻지 않으려면 응용 프로그램 클래스에서 정적 속성을 정의하면됩니다. 그 자체. onCreate()
메소드 에서 속성을 초기화하십시오 .
예를 들면 다음과 같습니다.
public class ApplicationController extends Application {
private static ApplicationController _appCtrl;
public static ApplicationController getAppCtrl()
{
return _appCtrl;
}
}
의 서브 클래스는 Application
리소스를 얻을 수 있기 때문에 정적 메소드를 정의 할 때 간단히 액세스 할 수 있습니다.
public static Resources getAppResources()
{
return _appCtrl.getResources();
}
그러나 메모리 누수 를 피하기 위해 컨텍스트 참조를 전달할 때는 매우주의하십시오 .
데이브, 어떤 종류의 데이터입니까? 전체 응용 프로그램과 관련된 일반 데이터 (예 : 사용자 데이터) 인 경우 Application 클래스를 확장하여 저장합니다. 데이터가 활동과 관련된 경우 onSaveInstanceState 및 onRestoreInstanceState 핸들러를 사용하여 화면 회전시 데이터를 유지해야합니다.
실제로 오리엔테이션 기능을 재정 의하여 활동이 파괴 및 재 작성되지 않도록 할 수 있습니다. 여기를 보십시오 .
Application 클래스를 생성하고 해당 Calss에 모든 데이터를 저장하여 애플리케이션의 어느 곳에서나 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/4208886/using-the-android-application-class-to-persist-data
'Programming' 카테고리의 다른 글
Python 스크립트를 실행하려고 할 때“ImportError : No module named” (0) | 2020.08.03 |
---|---|
Gulp에서 Browserify를 사용하여 출력을 Uglify하는 방법은 무엇입니까? (0) | 2020.08.03 |
데이터를 3 세트 (트레인, 검증 및 테스트)로 나누는 방법은 무엇입니까? (0) | 2020.08.03 |
Visual C ++ : # 동일한 솔루션으로 다른 프로젝트의 파일 포함 (0) | 2020.08.03 |
주석 만있는 두 바이너리 프로그램이 gcc에서 정확히 일치하지 않는 이유는 무엇입니까? (0) | 2020.08.03 |