2017-05-11 2 views
0

내 앱에서 일반적인 상황이 아닙니다. 나는 주 활동을하고, 그 다음에 활동 A를 활동 A에서 열어 활동 B를 활동 B에서 열 수 있습니다. 활동 A를 열 수 있습니다. 이 경우 안드로이드 모니터에서 응용 프로그램 메모리가 증가 할 때마다 보았습니다. 예를 들어 150 개의 활동 및 90MB 메모리에서 응용 프로그램이 다운되었습니다. 이 메모리가 지워진 후 이전 활동 (A 또는 B)이 열리고 사용자가 뒤로 이동할 수 있습니다.하나 하나 많은 활동을 시작하는 방법

이 문제를 방지 할 수 있습니까? 예를 들어, 특별한 의도 플래그 또는 다른 것을 사용하십시오. 고마워.

사용자는 다시 (가) 활동 인스턴스를 죽일 (파괴)을 호출 할 수 있습니다

+0

@Opiatefuchs 이것은 우리의 수용 기준입니다 :) –

+0

150 activities? leaved 된 액티비티에 finish()를 호출하거나 singleInstance 특성을 액티비티 수준의 매니페스트에 넣어야합니다. – Opiatefuchs

답변

1

당신은 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT를 사용할 수 있습니다. 그러면이 Activity의 기존 인스턴스 (이미 스택에 존재하는 경우)가 Activity의 새 인스턴스를 만들지 않고 맨 앞으로 이동합니다. 이 작업을 수행하면 onCreate()이 인스턴스에서 두 번 호출되지 않는다는 점에 유의하십시오. 대신 onNewIntent()을 호출하여 재정렬에 사용 된 Intent을 전달한 다음 onResume()을 전달합니다.

그러나 이것은 BACK 문제를 해결하지 못합니다. 사용자가 150 번 뒤로 이동하여 역순으로 활동 스택을 제공하도록하려면이 문제를 별도로 해결해야합니다. 이렇게하려면 public static 변수에 자신 만의 개체 스택을 유지하여 스택에 150 개의 활동을 생성하는 환상을 만들 수 있습니다. 스택의 각 개체에는 적절한 Activity을 다시 만들거나 재정렬 할 수있는 충분한 데이터가 있어야합니다. 데이터.

1

사용 의 AndroidManifest.xml 파일 목록이 내부 <activity> 태그의 속성으로 singleTop : 우리가 원하는대로

singleTop 활동 인스턴스가 여러으로 생성 할 수있다. 차이점은 호출자 작업의 스택 맨 위에 동일한 유형의 활동 인스턴스가 이미있는 경우 새 활동이 생성되지 않고 기존 의도로 전송 됨 활동 인스턴스 을 통해 전송 됨 onNewIntent() 메소드입니다. 좋은 토론이에 대한

,