2012-05-10 2 views
5

몇 가지 활동이있는 응용 프로그램에서 작업하고 있습니다. 하나의 활동이 다음 활동을 시작합니다. 일부 값을 공유하기 위해 MyApplication이라는 사용자 정의 구현을 사용하고 있습니다 (저는 android.app.Application).
우리 모두 알다시피, 안드로이드 시스템은 더 많은 공간이 필요하다면 앱을 죽인다.
응용 프로그램 컨텍스트가 죽었지 만 활동이 없습니다.

  • 내가 다른 애플 리케이션을 내 응용 프로그램을 열고 그냥 내가 그것을 (홈 버튼)를 닫습니다
  • 다른 응용 프로그램처럼 사용하고 사용하는 시스템 내 응용 프로그램 때문에 죽일 것이다
  • :하지만이 문제로 연결 내 응용 프로그램을 다시 열 때 메모리
  • 을 낭비하는 것, 내가 마지막으로 사용 된 활동을 열고 싶어하고하여 MyApplication의 값이 null이기 때문에 나는 힘 가까이를 얻을 수

이상한 것은, 인 시스템 destr 그 oys 내 응용 프로그램,하지만 그것은 활동을 유지하는 것 같습니다. 응용 프로그램에 수명주기가없는 것으로 보이는 이유는 무엇인지 이해하지 못합니다.

내가 갖고 싶은 것 :
MyApplication (전체 응용 프로그램, 활동뿐만 아니라)이 죽을 때, 나는 마지막 활동도 역시 죽이고 싶습니다. 따라서 앱을 다시 열면 manifest.xml에서 제공하는 주요 활동이 시작됩니다.
또는
MyApplication의 값은 유지되며 응용 프로그램이 삭제되면 손실되지 않습니다. (나는 공유 환경 설정이 작동하지 않을 것이라고 생각하기 때문에 몇 가지 객체에 대해 말하고있다.)
서비스를 사용하여 내 활동을 바인딩하고 싶지는 않지만 마지막으로 사용한 활동이 응용 프로그램 컨텍스트에 달려 있다고 시스템에 알리는 것과 비슷한 방법이 있습니까?

내 문제가 무엇인지 이해하고 누군가가 나를 도와 줄 수 있기를 바랍니다.

+0

내가 좋아하는 방법 답변 없음 당신이 명확하게 그것의 사용을 주목하더라도 사용자 정의 응용 프로그램의 사용을 참조하는 것처럼 보입니다 : /). 응용 프로그램을 사용해 보셨습니까?ActivityLifecycleCallbacks, 전혀 역도를 필요로 할 수도있는 것처럼 보이기까지 노력하고 있는지 확실하지 않습니다. – MikeIsrael

+0

** 활동 스택 내역 **, rite? – waqaslam

+0

감사합니다. MikeIsrael가 맞습니다. 아래 답변은 내 문제를 언급하지 않습니다. 활동 수명주기 사용은 일시적인 해결책 일뿐입니다. 전체 응용 프로그램이 죽으면 응용 프로그램이 해당 활동을 처리하고 죽일 수 있다면 더 좋을 것 같습니다. 활동 스택 내역은 내 문제보다 백 버튼 동작을 처리하는 것이 아닙니다. 나는 이것이 활동 문제가 아니라 응용 문제라고 확신합니다. – joshplusa

답변

1

올바른 방법은 응용 프로그램 상태를 저장하는 것입니다. onSaveInstanceState (Bundle savedInstanceState) 메소드를 재정 의하여 상태를 저장하고 onRestoreInstanceState를 검색하여이를 검색하십시오.

당신은 대량의 데이터를 저장해야하는 경우

당신은 응용 프로그램을 종료하고 onPause(), onResume()onStop() 방법에 그것을 원하는 방식으로 다시 시작 확인해야 SQL 데이터베이스

+0

Tipp에게 감사 드려요.하지만 제 게시물에 쓴 것처럼, 이것은 제게 적합하지 않습니다. 내가 이해하는 한, 응용 프로그램 상태에서 내 개체를 저장할 수 없습니다. – joshplusa

+0

그러면 내 최선의 추측은 SQL 데이터베이스를 사용하여 개체를 저장하는 것입니다 – Ika

+0

좋아. 내 문제를 해결하는 최선의 방법은 무엇인지 자세히 살펴볼 것입니다. 도와 주셔서 감사합니다! – joshplusa

0

을 사용하는 것이 좋습니다. 응용 프로그램의 상태를 저장할 수 있습니다 savedInstanceState을 확인 (그리고 그것에서 onCreate에 매개 변수로 보낼 때, 복원) 응용 프로그램의 사용자 정의 구현에서

+0

고맙지 만 Activity가 아닌 Activity에 대해 이야기하고 있습니다. – joshplusa

+0

@joshplusa 당신은 두 가지에 대해 이야기하고 있었고, onStops() 이후에 다시 시작할 때 주 활동을 시작하기를 원했던 것입니까? – keyser

+0

예. 지금은 onResume()에서 값을 확인하고 있습니다. 그들이 null이라면 나는 앱을 마친다. 이렇게하면 언제든지 주 활동에 참여할 수 있습니다. 그러나 그것은 좀 더러운 것입니다. 어쩌면 활동 스택 내역을 자세히 살펴 봐야 할 것입니다. 답변 해 주셔서 감사합니다. – joshplusa

0

, 플래그를 추가 말 :에

public boolean appContextExist = false; 

당신의 첫 번째 활동

가 가에서 onCreate와 onResume 문맥을 필요로 당신의 활동에 대한 방법은 다음을 추가

재정이 true로 플래그를 설정합니다

MyApplication myApp = ((MyApplication) getApplicationContext()); 
if (!myApp.appContextExist) { 
    // Code to return to start activity here 
}