2

私のアプリケーションでは、項目をクリックすることでどちらか一方を開始できる 2 つのリスト アクティビティがあります。

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

したがって、ユーザーがクリックしすぎると、すべてのスタックがいっぱいになり、システムはStackOverFlowException?をスローします。

私が選んだ解決策は、これら 2 つのアクティビティに でタグ付けするnoHistory="true"ことでしたが、ユーザーが戻るボタンでこれら 2 つのアクティビティ間を移動できないことを残念に思います。

誰かがより良い代替手段を見つけるのを手伝ってくれますか?

前もって感謝します

編集: より包括的にするために、このアクティビティ ワークフローの目標とは何かを説明しましょう:

年のリストにリンクされた名前のリストを格納するデータベースがあります。名前は複数の日付に関連付けることができ、1 日の同じことを複数の名前に関連付けることができます。

the database schema 

|  names  |---< n, m >---|  days  |

したがって、このアクティビティ ワークフローは一種のデータベース ナビゲーターです。

  • Activity1は、NameListActivity特定の日にリンクされた名前のリストを表示します。
  • Activity2は、DateListActivity特定の名前にリンクされた日のリストを表示します。

ユーザーが のアイテム (名前) をクリックすると、クリックした名前にリンクされた日付のリストで が開始されますNameListActivity。 同様に、ユーザーが の項目 () をクリックすると、クリックした日にリンクされた名前のリストで が開始されます。DateListActivity
DateListActivityNameListActivity

4

7 に答える 7

6

したがって、ユーザーがクリックしすぎると、すべてのスタックを埋めることができ、システムはStackOverFlowExceptionをスローしますね。

いいえ、ありません。

于 2010-01-08T14:52:27.330 に答える
1

私が理解しているように、Androidのアクティビティの「スタック」は、従来の意味での「スタック」ではなく、メモリはよりインテリジェントな方法で管理されます。アクティビティスタックは実際にはヒープ上にあり、OSは必要に応じて、スタックの下位にあるアクティビティを強制終了します。

最悪の事態は、古い歴史を失うことだと思います。

テストする場合は、各アクティビティに大量のメモリを割り当てて、5または6が使用可能なメモリをいっぱいにするようにしてから、試してください。

于 2010-01-08T18:09:33.487 に答える
1

Activity2 から Activity1 に移動する機能を削除すると、ユーザー エクスペリエンスが低下する理由がわかりません。このタイプのメニューをナビゲートするとき、頭の中で階層的なリストを頭の中で作成していると思います。

別のデザインを提案するには、メニューの内容に関する詳細が必要ですが、メニュー システムを再考するのが最善の方法かもしれません。

于 2010-01-08T12:34:11.083 に答える
1

コモンズウェアは正しいです。スタック オーバーフローを心配する必要はありません。:) ただし、スタックをクリアして、説明した状況を回避するようにアプリを設計できます。Clearing the Stack、特にclear topの使用を調べてください。

于 2010-01-08T22:08:36.187 に答える
0

この noHistory="true" を削除して、代わりに android:launchMode="singleTask" http://developer.android.com/guide/topics/manifest/activity-element.html#lmodeを配置し てみてください。ただし、@commonsware をマークしてください。そのままでいい。

于 2010-01-08T15:13:58.427 に答える
0

私のアプリケーションにも同様の問題があります。問題は、各アクティビティのネストされたビューの数にあるようです。したがって、たとえば次の場合:

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

そしておそらくさらにいくつかのネストがある場合、そのようなビューから同様のビューに移動して数回戻った後(私の経験では)、スタックオーバーフローが発生する可能性は高くなります。hierarchyviewer (android-sdk/tools) でネストを確認します。また、直し方がわからないので教えていただければと思います...

于 2010-01-08T15:56:54.887 に答える
0

必要なのは、履歴を維持するためにスタックに依存するのではなく、何らかの構造に履歴を保存することです。そうすれば、スタックを吹き飛ばさずに、優れたユーザー エクスペリエンスを維持できます。

于 2010-01-08T12:46:41.187 に答える