2012-11-15 6 views
1

여기 상황이 있습니다. 서비스를 시작하는 Android 활동이 있습니다 (이 서비스는 파일 보내기/받기 등을 의미합니다). Activity 클래스 객체에 생성 된 핸들러를 통해 SendMessage()를 액티비티에 서비스한다. 활동에는 서비스에 포함 된보기에서 현재 수행중인 작업의 상태가 표시됩니다. 이 활동을 통해 다시 시작한 활동은 다시 시작하기 전에 시작한 서비스 상태를 얻을 수 없습니다.

  • 사용자가 전송하는 과정을 시작하기 위해 서비스를 명령 - 여기

    는 활동
  • 활동 활동 서비스를 시작
  • 전역 객체에 처리기를 만들어 시작

    1. 문제를입니다/파일 받기
    2. 서비스가 현재 사용 중이며 전역 개체를 통해 얻은 처리기를 통해 UI에 메시지를 보냅니다.
    3. 활동이 수신 handleMessage()와 UI에 상태를 게시는
    4. 는 이제 사용자는 (할 수있다 그는 다른 앱 사용하기 시작) 아마도 내 활동을 죽이고 있지만 서비스가 사용 중입니다이 과정 안드로이드 동안
    5. 을 배경 내 활동을 전송/평균 시간에
    6. 서비스를 실행하는 사용자가 활동을 엽니 시간 후
    7. ,
    8. (문제를) 완료 활동은에서 onCreate는 서비스의 마지막 상태를 모르는 행위라고 시작합니다. 성공적으로 완료했는지 또는 실패했는지 또는 다른 상태 인 지 여부를 묻는 메시지가 표시됩니다.
  • 답변

    0

    SharedPreferences, SQLite, 텍스트 파일 또는 단순히 응용 프로그램 인스턴스의 정적 변수 또는 변수/필드 (코드의 모든 위치에서 getInstance에 대한 응용 프로그램의 싱글 톤 구현). 정적 변수 및 응용 프로그램 인스턴스는 한 번 안드로이드에 의해 사망 ​​메모리에서 상태를 잃게됩니다.

    +0

    좀 더 명확하게 만들 수 있습니까? 액티비티가 종료되면 정적 변수가 여전히 존재 함을 의미합니까? 다시 시작하면 거기에서 가치를 얻을 수 있습니까? – Ahmed

    +0

    활동은 신청서 (종류)의 일부입니다. 따라서 프로세스가 살아있는 동안 정적 변수를 사용할 수 있습니다. 프로세스가 살아있을 때, 응용 프로그램은 여전히 ​​살아 있습니다. 그래서 당신은 자신의 클래스를 가지기 위해 응용 프로그램의 클래스 이름을 다시 정의 할 수 있습니다. Singleton을 사용하여 정적 또는 필드에 액세스하도록 Application을 확장합니다. –

    +0

    괜찮습니까? 그리고 마지막 상태를 저장하기 위해 서비스 클래스에서 정적 var을 만드는 방법은 다릅니다. – Ahmed

    2

    이는 서비스를 시작한 방법, 진행 방법에 따라 다릅니다.

    서비스가 동일한 프로세스 및 모드 START_STICKY에서 실행되는 단순한 상황을 가정하면 stopService()을 활동에서 호출 할 때까지 서비스가 메모리에 남아 있습니다.

    이 경우 서비스의 현재 상태 (시작, 실행, 오류, 종료 등)를 저장하고 활동에서 테스트하는 클래스 수준의 정적 변수를 만들 수 있습니다.

    감사합니다.

    +0

    서비스 클래스의 정적 var는 무엇입니까? – Ahmed

    +0

    네, 잘 작동합니다. 내 앱에서 서비스 상태를 제어하는 ​​데 사용하고 있습니다. – Luis

    +0

    감사합니다 + 1, 위의 답변을 이미 수락했습니다 ... – Ahmed

    관련 문제