一旦调用完成后如何从堆栈中完全删除活动?

时间:2012-06-26 07:59:57

标签: android memory-management

当我启动app时,我的堆大小在第一个活动时增加到10MB,然后当我进入下一个活动时,我的堆大小增加到37 MB。在第二个活动中,我通过bitmap.recycle()按钮单击释放一些内存,因此当单击特定按钮堆大小减少到32MB时。现在当我调用完第二个活动时,我的内存大小减少到16MB,因此提示它没有从堆栈中完全删除,因为第一个活动的原始内存大小是10MB。

现在当我回到第二个活动时,它会发出以下崩溃,表明我在按钮点击时发布的位图没有被重新创建。每次用户输入该活动时,我在第二个活动上使用相同的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

我在这里缺少什么?一旦调用完成后如何从堆栈中完全删除活动?

我尝试在活动一上使用android:launchMode="singleTop"android:clearTaskOnLaunch="true",在活动二上使用android:launchMode="singleTop" android:noHistory="true"

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分: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 );
}

答案 1 :(得分:1)

一旦完成被调用onDestroy也将被调用并且整个活动将被清除但是即使你想手动尝试,你可以尝试堆栈清除或者可以调用垃圾收集器。供您参考:

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

// For calling GC
System.runFinalization();
System.exit(0);