2017-10-18 3 views
-2

を漏洩しましたそのインタフェースのために。その出口で古いデフォルトのキャッチされていない例外ハンドラを復元することはありません。 A→B→A→B ...を実行すると、アクティビティBがリークしたためメモリ不足例外が発生します。なぜ活動Bが漏れたのですか?活動は、2つの活動を持っているアプリがあるとし

答えて

0

これは間違ったアーキテクチャです。連鎖検索では、それぞれActivityの単一のインスタンスしか持たないようにしてください。 startActivity()を呼び出し、使用するIntentIntent.FLAG_ACTIVITY_REORDER_TO_FRONTと設定して、別のActivityインスタンスを切り替える必要があります。また、Intentに「追加」として表示するデータを追加します。

バックボタンを使用してチェーンを戻すことができるようにするには、各Activityは、ユーザーがいつでもそのページを再作成するために必要なデータを含むスタックを管理する必要があります。 onCreate()onNewIntent()のデータ(「追加」からのデータ)をスタックにプッシュして表示する必要があります。その後、を上書きし、startActivity()を呼び出し、IntentIntent.FLAG_ACTIVITY_REORDER_TO_FRONTを設定して、前のActivityに戻ります。また、「戻る」を希望することを示す「余分な」をIntentに追加します。 onBackPressed()では、残っているActivityのデータスタックから一番上の要素を破棄する必要があります。これにより、ユーザがActivityに戻ったときにスタックが正しいことが保証されます。

onNewIntent()ユーザーがちょうどActivityを入力した場合、管理対象データのスタックの上に既にあるデータが表示されます。

このように、各Activityのインスタンスを1つしか持たない場合、ユーザーは1日中一連のアクティビティを連鎖でき、BACKボタンは常に機能し、メモリが不足する心配はありません。

taskAffinityまたはフラグなどを使用してこれを実行しようとすると機能しません。あなたの時間を無駄にしないでください。それはまた悪いプログラミングスタイルです。

これは明らかです。 とメモリ例外使用
のために追加のマニフェスト

アンドロイド> V3

<application 
    .... 
     android:largeHeap="true"> 
関連する問題