当我启动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"
。
任何建议都将受到赞赏。
答案 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);