2012-10-19 9 views
0

활동이 2 개 있습니다. 주요 활동 A & 활동 B 활동 A가 파괴되기를 원하지 않습니다. 새로운 작업으로 B 액티비티를 시작합니다.활동 외부에서 활동 일시 중지/다시 시작

public static void startActivity(Class<?> startClass) { 
    Intent intent = new Intent(Constants.getActivity(), startClass); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    Constants.getActivity().startActivity(intent); 
}` 
  • Constants.getActivity는()가 활동을 파괴 생성/
  • startClass는

것입니다 활동 "A"또는 활동 "B"중 하나이며 현재 활동에 대한 컨텍스트를 반환 그들은 누출된다. 내가 잘못하고 있니? "B"액티비티를 "A"액티비티에서 시작하려면 어떻게해야하며 그 반대의 경우도 필요할 때 백그라운드에서 둘 다 유지해야합니다.

+0

그들을 어떻게 백그라운드에서 유지하고 싶니? – Egor

+0

의도 플래그 확인 ... 문제가 해결됩니다. – ArulRaj

답변

0

작업을 사용할 때 정리가 매우 중요합니다. 활동의 모든 타스크를 정리해야합니다. readthis

활동에 많은 미친 초기화가없는 경우 finish 및 onCreates 만 사용하십시오. 그렇지 않으면 onResume은 당신이 활동들 사이를 전환 할 때 자주 호출된다는 것을 명심하십시오. 여기서 정리가 중요 할 것입니다. 정리 작업을 수행하지 않으면 가능한 정리 된 활동의 죽은 객체 참조가있는 활동 중 하나가 활동 스택에서 다시 돌아와 예외를 throw 할 수 있습니다. 이 일종의 예외를 디버그하는 것은 매우 어렵습니다.

+0

안녕하세요. 내 게시물을 편집 해 주셔서 감사합니다. 내 게시물 뒤에 아이디어는 그 안드로이드를 실행하는 임베디드 시스템에서 일하고있다."뒤로"버튼이 없으므로 활동 간 변경은 GPIO에 의해 수행됩니다. 날씨 GPIO 0 또는 1, 활동 변경됩니다. 내 응용 프로그램에서 GPIO 값을 읽고 그 값에 따라 특정 기능을 실행하는 또 다른 클래스가 있습니다. 기능 중 하나는 원래 게시물에 올렸습니다. 날씨가 좋다는 것을 알고 싶으면 두 활동을 모두 "살아있다"상태로 유지하고 배경/전경을 전환 할 수 있습니다. –

+0

불가능합니다. 두 가지 가능성있는 옵션을 제공합니다. 1) UI를 변경하고 활동을 유지하기 위해 조각을 사용할 수 있으며, 활동은 GPIO에서 콜백을 수신합니다. 2) GPIO 변경을위한 수신기에 대한 참조를 보유하는 싱글 톤을 만듭니다. 각 액티비티는 리스너 인터페이스를 구현하고 onPause/onResume은 새 리스너로 등록/등록 해제합니다. – Budius

0

우선 무엇을하려고합니까? UI에서 백그라운드에서 수행 할 작업을 항상 분리해야합니다. 액티비티는 단순히 UI를 표시하는 컨테이너 일 뿐이며, 나머지는 영구 저장소 또는 저장된 인스턴스 번들에서 저장하고 복원 할 수 있습니다.

여기서 활동 라이프 사이클과 서비스 수명주기의 차이점을 이해하는 것이 매우 중요합니다.

나는 여기에 또 다른 질문에서 내 대답을 참조거야 :

Your app will be in the background, onResume and onPause will both be called

는 OS가 새로운 응용 프로그램과 모든 기존 응용 프로그램을 유지하기에 충분한 메모리를 가지고 제공.

  • 사용자가보고 있지 않는 동안 필요한 장기간의 프로세스가있는 경우 서비스를 사용하십시오.

  • 사용자가 동일한 상태로 앱을 반환해야하는 경우 사용자가 다시 돌아올 때 you need to do the work in onResume and onPause to save the state information and initialize your UI again입니다. 정말 죽일 수 있다고 걱정된다면 (내가 생각한 번들을 잃어서는 안됨), 앱의 SharePreferences에 저장할 수 있습니다.

  • 당신이 특정 공유 의도에서 응용 프로그램 반환, 당신은 당신이 말한대로 "살아"활동을 지킬 수에 startActivityForResult

0

사용할 때 알고 싶은 경우. 활동이 일시 중지되면 Android 시스템은 언제든지 메모리를 청구하고 언로드 할 수 있습니다.

그러나 A에서 B로 전환하려면 A와 B가 하나의 활동 내에서 다른보기가 될 수 있습니다. 어쩌면 너는보고 싶을 것이다 http://developer.android.com/reference/android/widget/ViewFlipper.html