0

当我启动应用程序时,我的第一个活动的堆大小增加到 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"andandroid: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 回答