2017-05-11 15 views
0

私のアプリでは典型的な状況はありません。私はメインアクティビティを持っている、私はアクティビティAからアクティビティAをオープンするアクティビティBをアクティビティBから開くことができるアクティビティBを開くことができるアクティビティAなど この場合、アンドロイドのモニタを見て、アプリケーションのメモリが増加した。たとえば、150のアクティビティと90 MBのメモリでアプリケーションがクラッシュしました。このメモリがクリアされ、以前のアクティビティ(AまたはB)が開かれた後、ユーザーは戻ることができます。どのように多くの同じ活動を1つずつ始める

この問題を防ぐことはできますか?たとえば、特殊なインテントフラグなどを使用します。どうもありがとう。

ユーザは、(バック

+0

Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstanceは、それは非常に多くの活動をオープンすることが目的でしたか? – Opiatefuchs

+0

@Opiatefuchsこれは私たちの受け入れ基準です –

+0

150アクティビティ? leavedされたそのアクティビティに対してfinish()を呼び出すか、singleInstance属性をアクティビティレベルのマニフェストに入れる必要があります。 – Opiatefuchs

答えて

1

Activityを起動するときは、Intent.FLAG_ACTIVITY_REORDER_TO_FRONTを使用することができます。これにより、このActivityの既存のインスタンス(すでにスタックに存在する場合)が、Activityの新しいインスタンスを作成せずに前面に移動します。これを行うと、onCreate()がインスタンスで2回呼び出されないように注意してください。代わりにonNewIntent()が呼び出され、並べ替えに使用されたIntentを配信し、次にonResume()を配信します。

これでBACK問題は解決しません。あなたが本当にあなたのユーザを150回戻して、アクティビティスタックを全く逆の順序で提示できるようにするには、この問題を別途解決する必要があります。これを行うには、public static変数に独自のオブジェクトスタックを維持することによって、スタック内に150個のアクティビティを持つ錯覚を作成できます。スタック内の各オブジェクトには、適切なActivityを再作成(または並べ替え)データ。

0

仕上げをナビゲートすることができる)(破壊する)アクティビティインスタンスを殺すために呼び出すことができます。 フィニッシュ:enter link description here

また、ライフサイクルを調べることができます:enter link description here

1

使用singleTopのAndroidManifest.xmlファイルリスト内の<activity>タグの属性として、この:

singleTopアクティビティインスタンスは、私たちが望む限り多くを作成することができます。 の違いは、発信者タスクのスタックトップに同じ タイプのアクティビティインスタンスが既に存在する場合は、 新しいアクティビティが作成されず、インテントが既存の アクティビティインスタンスに送信されますonNewIntent()メソッド。良い議論がありに関する

関連する問題