0

アプリを起動すると、最初のアクティビティでヒープ サイズが 10 MB に増加し、次のアクティビティに進むとヒープ サイズが 37 MB に増加します。この 2 番目のアクティビティでは、ボタンのクリックでメモリを解放しているbitmap.recycle()ため、特定のボタンをクリックするとヒープ サイズが 32MB に減少します。この 2 番目のアクティビティの終了を呼び出すと、メモリ サイズが 16MB に減少するため、最初のアクティビティの元のメモリ サイズが 10MB だったため、スタックから完全に削除されていないことがわかります。

2 番目のアクティビティに戻ると、次のクラッシュが発生し、ボタンのクリックで解放したビットマップが再作成されていないことが示されます。ユーザーがそのアクティビティに入るたびに2番目のアクティビティで同じonCreateメソッドを使用しているため、xmlからビットマップを再度フェッチする必要があります。

06-26 08:45:39.636: E/AndroidRuntime(6265): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@41361ef0

ここで何が欠けていますか?終了が呼び出されたら、スタックからアクティビティを完全に削除する方法は?

アクティビティ 1 とアクティビティ 2 で使用してみandroid:launchMode="singleTop"ました。android:clearTaskOnLaunch="true"android:launchMode="singleTop" android:noHistory="true"

任意の提案をいただければ幸いです。

4

2 に答える 2

1

システムのアプリケーションスタックからアプリケーションを削除するために、そのプロセスを強制終了できます。多分これは役立ちますか?

/**************************************************************************************
*   Removes this application from the stack by killing it's process.
**************************************************************************************/
public static final void killProcess()
{
    //get current process id
    int processId = android.os.Process.myPid();

    //tell android to kill this process
    android.os.Process.killProcess( processId );
}
于 2012-06-26T08:24:20.510 に答える
1

終了が呼び出されると、onDestroy も呼び出され、アクティビティ全体がクリアされますが、手動で何かを試したい場合でも、スタック クリアを試すか、ガベージ コレクターを呼び出すことができます。ご参考までに :

// For stack clear
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

// For calling GC
System.runFinalization();
System.exit(0);
于 2012-06-26T12:01:22.793 に答える