2016-06-08 4 views
1

Android 앱을 개발하고 메모리 관리 문제가 있습니다. 내가 좋아하는 무한 방법을 탐색 할 수있는 능력이 있습니다Android 무한 활동 스택

User activity that contains followers of user (U) -> Another user (U) -> post (P) -> U -> U -> P -> ... etc 

그래서, 기본적으로 난 그냥 새로운 활동을 시작 통해 만든 거라고,하지만 나는 그것이 메모리 오류와 충돌 6-7 활동을 열 때 나는 발견했다. 각 활동은 점점 더 많은 기억을 시작합니다. 우선 - finish() 이전 활동은 새로운 것을 시작하기 전에 좋지 않습니다. 왜냐하면 나는 모든 방법으로 사용자를 되돌려 놓아야하기 때문입니다. 둘째, 내가 대신 새로운 시작, 이미 시작 활동을 사용하는

FLAG_ACTIVITY_REORDER_TO_FRONT 

와 그것을 해결하기 위해 시도 것입니다. 그러나 처음 사용할 때 다시 그리지 않습니다. 예를 들어 내가 처음 게시물을 올렸을 때 이전 게시물과 함께 올 때 활동을 복원 할 때,하지만 내가 다시 돌아가서 모든 것을 잘 작동시킬 때. 그러나 여전히 운이 없다.

이런 종류의 무한 스택을 구성하는 가장 좋은 방법은 무엇입니까? 예를 들어 5-6 이전 단계의 스택 저장을 수행하고 매우 심오한 활동을 닫을 수 있습니다. 예를 들어, 일부 스토리지에 전체 활동 상태를 저장하고 활동 스택을 수동으로 구성 할 수 있습니까?

감사

+0

이 가능하지만 잘못된 방법으로 배열 목록으로뿐만 아니라 원하는대로 당신이 당신의 스택을 구성 할 수 있습니다. 사례가 무한 루프처럼 보이는 경우 활동 대신 단편 사용 – once2go

+0

그런데 더 많은 코드 또는 임시 보관 창 전환 흐름을 추가하십시오. – once2go

+1

무한 탐색이 가능한 유사한 앱에서 작업합니다. 이 응용 프로그램은 매우 사진 intensiva 애플 리케이션이며 사진 작업에 대한'피카소'에 의존합니다. 무엇보다 안타깝게도 Android가 어떻게 작동하는지 알 수 있습니다. 그것은 슬프지만, 그것이 그렇게하는 방법입니다. 그러나 단지 6 ~ 7 가지 활동 만이 나를 위해 거의 보이지 않으며 어딘가에서 메모리 누수가 발생할 가능성이 있음을 나타냅니다. 내 응용 프로그램에서 나는 문제에 부딪치기 전에 쉽게 60 개의 활동을 쉽게 얻을 수 있습니다. 따라서 https://github.com/square/leakcanary에서 앱 누출 가능성을 확인하시기 바랍니다. – Budius

답변

0

내 모든 것을 쓰는 데 의견이 충분하지 않습니다. 솔루션 듣기를 설명하려고하는 이유입니다. 콘텐츠 전환 흐름에 다른 기능이 없다는 것을 알 수 있습니다. 그래서, 재활용 패턴에 대해 알고 있습니까? 어댑터와 같이 (사용자 & 게시 용) 엔티티 2 개만 만들 수 있습니다. 여기서 데이터 바인딩은 키 값 맵에서 생성됩니다. 이 맵은 앞 바인딩 중에 만들어야합니다. 지도 스택 맵 -> 활동 -> 사용자 삽입 조각 -> 맵핑 할 사용자 ID를 키로 추가 -> 부분을 포스트로 바꾸기 -> 사용자 ID에 대한 값으로 매핑 할 포스트 ID 추가 -> 사용자 - 지도에 키 추가 ... 등. 역 추적 맵 사용? 반대 순서로 (ID 가져 오기, 데이터 가져 오기, 데이터를 단편화).

활동 인스턴스화보다 메모리가 더 좋습니다.

P.S : 당신이 키 값으로 만 배열이나 연결리스트로 또는 스택 개체 개체

0

매니페스트 활동에 android:launchMode="singleInstance"을 설정하십시오. (대답은 https://stackoverflow.com/a/9598551/2808913)

이러한 활동 중 하나가 '집'활동 인 경우 일반적으로 앱에서 시작하여 돌아 오는 활동 인 경우 FLAG_ACTIVITY_CLEAR_TOP으로 시작하도록 설정할 수 있습니다. 이렇게하면이 액티비티로 돌아올 때마다 백 스택이 지워집니다. 뒤로 버튼을 누르면 이전 활동으로 돌아 가지 않고 앱이 종료됩니다.

+0

네, 그 말이 합리적입니다.하지만 새 인스턴스가 스택 맨 위에 오면 다시 돌아올 방법이 없습니다. 나는 여기서 뭔가 흥미로운 것을 발견했다. http://stackoverflow.com/a/3473377/997867 나는 이것이 더 나은 방법이 아니라는 것을 이해한다. 그러나 그것에 대해 어떻게 생각하니? –

+0

흠, 수동으로 할려면 조각을 사용해야한다고 생각합니다. 나는 많은 사람들이 파편을 좋아하지 않는다는 것을 안다. 그러나 그 해결책은 훨씬 더 어리 석다. 작가조차도 추천하지 않습니다. 적어도 조각 안드로이드에서 꽤 표준 있습니다 :) – miva2