Programming

Android Application 클래스를 사용하여 데이터 유지

procodes 2020. 8. 3. 20:44
반응형

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

반응형