2014-02-08 3 views
0

내 프로그램의 작업 흐름은 다음과 같습니다공유 변수를 Android에서 어떻게 유지해야합니까?

  1. 앱 실행

    • 시작 화면, 서버 API를 확인 API에서 파일의 일부를 파일 이름의 목록
    • 다운로드를 얻을 수 목록에서 다운로드 한 파일 이름을 제거하십시오.
  2. 응용 프로그램이 열렸습니다.

    내가 선택할 때다운로드가 완료
    • , 목록

문제는, 내가이 다운로드 관리자에 보관했다가 목록에 다운로드에게 다른 파일을 시작합니다 메인 페이지로 이동 안드로이드 설정 활동을 떠나지 마라, 그것은 죽을 것이다. 일부 데이터 클래스 인 클래스가 필요하다면 공유 데이터 (여러 해시 맵, 배열 목록)를 저장하고 비동기 다운로드 완료 후 삭제를 계속 유지하며 죽이지 않습니다. 어떻게 할 수 있습니까? 감사합니다.

답변

2

보다 일반적인 문제는 여러 활동과 응용 프로그램의 모든 부분에서 상태를 저장하는 방법입니다. 정적 변수 (예 : 싱글 톤)는이를 달성하는 일반적인 자바 방법입니다. 그러나 안드로이드에서보다 우아한 방법은 여러분의 상태를 응용 프로그램 컨텍스트와 연관시키는 것입니다. 아시다시피, 각 활동은 가장 넓은 의미에서 실행 환경에 대한 정보 인 컨텍스트이기도합니다. 또한 응용 프로그램에는 컨텍스트가 있으며, Android는 응용 프로그램 전체에 단일 인스턴스로 존재 함을 보장합니다. 이를 수행하는 방법은 android.app.Application이라는 자체 하위 클래스를 만든 다음 매니페스트의 응용 프로그램 태그에 해당 클래스를 지정하는 것입니다. 이제 Android는 자동으로 해당 클래스의 인스턴스를 만들고 전체 애플리케이션에서 사용할 수 있도록합니다. 당신은 Context.getApplicationContext() 방법 (활동도 동일한 효과가있는 방법 getApplication() 제공)를 사용하여 어떤 컨텍스트에서 액세스 할 수 있습니다

class MyApp extends Application { 
    private String myState; 
    public String getState() { 
     return myState; 
    } 
    public void setState(String s) { 
     myState = s; 
    } 
} 
class Blah extends Activity { 
    @Override public void onCreate(Bundle b) { 
     ... 
     MyApp appState = ((MyApp) getApplicationContext()); 
     String state = appState.getState(); 
     ... 
    } 
} 

이 본질적으로 정적 변수 또는 싱글을 사용하는 것과 같은 효과가 있습니다,하지만 확실히 통합 기존 안드로이드 프레임 워크에 잘 들어 맞습니다. 이 방법은 여러 프로세스에서 작동하지 않습니다 (응용 프로그램이 여러 프로세스가있는 유일한 응용 프로그램 중 하나 여야 함).

+0

도움 주셔서 감사합니다. 왜 나는 단순히 상수 클래스를 생성하고 그 안에 변수를 넣을 수 없으며 정적으로 만들 수 있습니까? 그것은 응용 프로그램을 다시 열 때 클래스가 null 포인터가 보인다. 감사 – user782104

관련 문제