gpt4 book ai didi

android - 重新启动应用程序以释放堆内存

转载 作者:行者123 更新时间:2023-11-29 21:31:40 25 4
gpt4 key购买 nike

在我的应用程序的特定时间点,我想完全重新启动该应用程序,即终止与该应用程序关联的进程,然后再次重新启动它。我想这样做以释放堆空间,因为我的应用程序包含大量位图。

我用了this SO link获得最高投票答案并创建以下额外 Activity :

/** This activity shows nothing; instead, it restarts the android process */
public class MagicAppRestart extends Activity {
// Do not forget to add it to AndroidManifest.xml
// <activity android:name="your.package.name.MagicAppRestart"/>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.exit(0);
}
public static void doRestart(Activity anyActivity) {
anyActivity.startActivity(new Intent(anyActivity.getApplicationContext(), MagicAppRestart.class));
}
}

并从另一个 Activity 的所需位置将此 Activity 称为 MagicAppRestart.doRestart(this);

现在,问题是这在 android 2.3 上运行良好,但在 4.0 上,此代码仅退出应用程序但不要重新启动它

我做错了什么吗?针对此问题是否存在适用于所有操作系统的解决方案?

此外,我已经尝试过以下代码,它会重启但不会重启进程,因此不会释放堆,因此对我来说没有用:

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

感谢任何帮助!

编辑

我的应用程序中有 7 个 Activity ,包括家庭 Activity 。除了 home activity,其他 6 个 activity 使用 ViewFlipper,有 5-8 个屏幕。

我在每个 Activity 的 onStop()onDestroy() 中使用 unbindDrawables() 但它只释放了一小部分内存。

因此,我希望完全重启应用进程。

编辑2

我刚刚遇到这个:

此外,Android 更改了位图内存的分配方式。在 Android 3.0 之前,位图是在 native 内存中分配的,只有一个小的描述符保留在 Java 堆中;现在整个位图是从 Java 堆中分配的。如果多个位图保存在内存中,这会导致 Java 堆很快用完。

我想这就是为什么我的方法适用于 2.3OS 设备而不适用于 4.0OS 设备的原因。

最佳答案

您无法清除堆。阅读this以便更好地理解。

希望对您有所帮助。

关于android - 重新启动应用程序以释放堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19313236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com