2010-01-08 2 views
1

내 응용 프로그램에는 항목을 클릭하여 둘 중 하나를 시작할 수있는 2 가지 목록 활동이 있습니다.Dilemna : StackOverflowException을 방지하거나 사용자 환경을 개선 하시겠습니까?

|--Activity1--|   |--Activity2--|   |--Activity1--| 
| item11 | ->click-> | item21 |   | item21 | ->click-> ... 
| item12 |   | item22 | ->click-> | item12 | 
| item13 |   | item23 |   | item13 | 
|-------------|   |-------------|   |-------------| 

그래서 사용자가 너무 많은 클릭하면, 그는 모든 스택을 채울 수있는 시스템은 StackOverFlowException 발생합니다 그것을하지 않습니다?

내가 선택한 솔루션은 noHistory="true"으로이 2 가지 활동에 태그를 추가하는 것이었지만 이제는 사용자가 뒤로 버튼을 사용하여이 2 가지 활동을 탐색 할 수 없다는 점에 유감스럽게 생각합니다.

더 나은 대안을 찾을 수있는 사람이 있습니까? 사전에

감사

편집 :

나는 연결 이름의 목록을 저장하는 데이터베이스가 :이 활동 워크 플로우의 목표는 무엇인지 설명하자, 더 포괄적하기 1 년의 날짜 목록. 이름은 여러 날짜에 연결될 수 있으며 하루 한 번 같은 이름을 여러 이름에 연결할 수 있습니다.

  • Activity1이 특정 일에 연결 이름의 목록을 표시의 NameListActivity입니다 :
    the database schema 
    
    | names |---< n, m >---| days | 
    

    그래서이 활동 워크 플로우 데이터베이스 네비게이터의 일종이다.
  • Activity2DateListActivity이며 특정 이름과 연결된 요일 목록을 표시합니다.

사용자가 NameListActivity의 항목 (A 이름)를 클릭의 DateListActivity은 클릭 이름에 링크 된 일의 목록과 함께 시작됩니다.
마찬가지로 사용자가 DateListActivity의 항목 ()을 클릭하면 NameListActivity이 클릭 한 날짜와 연결된 목록 af 이름으로 시작됩니다.

+1

나는 평상시와 같이 가야한다고 생각한다. Android에서 기록을 정리하지 않으면 스택 오버플로가 발생할 수 있지만 수천 번의 클릭이 필요하다면 문제가되지 않습니다. –

답변

5

그래서 사용자가 너무 많은 클릭하면, 그는 모든 스택을 채울 수 있는 StackOverflowException 발생합니다 시스템은 이 아닌가요?

아니요, 그렇지 않습니다.

+0

좋아, 아마 어떻게 작동 스택에 오해, 당신이 말하더라도 사용자가 ('NameListActivity' ->'DateListActivity' -> 'NameListActivity' ->'DateListActivity' -> ...) 천 번, 스택이 오버플로되지 않습니까? 그것은 그것의 동일한 활동 때문에입니까? 좀 더 설명해 주시겠습니까? Thx in advance – tbruyelle

+1

OS가 메모리가 필요하다고 생각한다면 죽일 필요가 있다고 생각되는 활동을 죽일 것입니다. 첫 번째 동영상 중 하나에 대해 자세히 설명되어 있다고 생각합니다. yougube google channel –

+1

에 있어야합니다. 활동이 스택에 있다고 가정합니다. 그들은하지 않습니다. 그들은 힙을 사용합니다. 활동별로 추가 스택 공간이 소모되지 않습니다. – CommonsWare

1

Activity2에서 Activity1로 이동하는 기능을 제거하면 사용자 경험이 저하되는 이유가 없습니다. 나는 당신이 이런 유형의 메뉴를 탐색 할 때 정신적으로 당신의 머리 속에 정신적 인 목록을 만들 것이라고 생각합니다. 따라서 item2를 클릭 할 때 Activity1로 돌아 가면 혼란스러워 할 것입니다.

메뉴의 내용에 대한 자세한 내용이 필요하지만 다른 디자인을 사용하는 것이 좋지만 메뉴 시스템을 다시 생각해 보는 것이 가장 좋습니다.

+0

좋아, 내가 내 질문을 편집 – tbruyelle

0

당신이해야 할 일은 스택을 사용하여 유지 관리하는 것이 아니라 일부 구조에 내역을 저장하는 것입니다. 그런 다음 좋은 사용자 환경을 유지하면서 스택을 날려 버릴 필요가 없습니다.

+0

와우 이것은 또한 뒤로 버튼을 클릭 잡아 의미합니다 ... – tbruyelle

0

내 응용 프로그램과 비슷한 문제가 있습니다. 문제는 각 활동에 대한 중첩 된 뷰의 수에 있다고 보입니다. 그래서, 당신이있는 경우, 예를 들어 :

tab-> 
    linear layout-> 
     text, 
     linear layout-> 
      text, 
      scroll-> 
        text, 
        linear layout-> 
         image, 
         text 

어쩌면 몇 가지 더 스팅, 당신은 (내 경험에) 비슷한 일 다시 여러 번에 같은보기에서 점점 후 스택 오버 플로우를 얻을 것 확률은 높은. 계층 뷰어 (android-sdk/tools)로 중첩을 확인하십시오. 또한 문제를 해결할 수 있는지 알려주세요. 문제를 해결하는 방법을 아직 모르기 때문에 말씀하십시오 ...

+0

이 *는 StackOverflowException을 얻을 수있는 곳이지만 하나의 활동 내에 모두 있습니다. 질문은 둘 이상의 활동이있는 것과 관련이 있습니다. – CommonsWare

1

Android의 '활동'스택은 전통적인 의미에서 '스택'이 아니며, 메모리는보다 지능적인 방식으로 관리됩니다. 액티비티 스택은 실제로 힙에 저장되며, 필요하다면 OS는 스택에서 더 낮은 액티비티를 죽일 것입니다.

나는 최악의 경우, 오래된 역사를 잃어 버리면 일어날 것이라고 말하고 싶습니다.

테스트하려는 경우 각 작업에 많은 양의 메모리를 할당하여 5 또는 6이 사용 가능한 메모리를 채우도록 시도한 다음 시도하십시오.

1

공유지가 정확합니다. 스택 오버플로에 대해 걱정할 필요가 없습니다. :) 그러나 설명 된 상황을 피하기 위해 스택을 지우도록 앱을 디자인 할 수 있습니다. Clearing the Stack을 참조하십시오. 특히 clear top을 사용하십시오.