gpt4 book ai didi

android - 内存泄漏,单实例

转载 作者:行者123 更新时间:2023-11-29 16:13:35 25 4
gpt4 key购买 nike

this lib 的帮助下,我进行了一些显示图像的 Activity 。 .问题是应用程序内存不足。我尝试了 gc.clean()、空引用、在 imageloader 对象上调用 clear,但都没有成功。

在 MAT 中,我发现我有多个相同 Activity 的对象,如果我没记错的话,这是默认行为。我使用 singleInstance 来抑制多个实例,它有助于解决内存泄漏问题。

现在,由于 singleInstance,我在导航方面遇到了麻烦。您认为我应该继续使用 singleInstance 还是尝试修复多个实例的内存泄漏?

这是 ImageView gc 根检查: enter image description here

更新:

 Bitmap bitmap=null;
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is=conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
bitmap = decodeFile(f);
return bitmap;

ImageView imageView = (ImageView) convertView;
if(convertView == null){
imageView = new ImageView(_currentActivity);
}

UPD2(导航策略):

我有一个恒定的标题,其中包含启动家庭 Activity (带有画廊)和个人资料 Activity 的按钮;其次,有一个子标题也包含 3 个按钮,这些按钮指向另外 3 个带有 ListView 的 Activity (由 ImageView + 标签组成)。

这些标题、子标题元素在应用程序的每个 Activity 中都可用;链接按钮除了:

startActivity(new Intent(getActivity(), MainActivity.class));

Intent activityIntent = new Intent(getActivity(), SomeActivityWithListViewInside.class);
// passing some data like list id
activityIntent.putExtra("list_id", listId);
startActivity(activityIntent);

那么,那些 Activity 实例是由那些 startActivity 调用引起的 - 你认为我应该使用 singleTop 或任何其他 intent 参数来避免这个问题吗?

最佳答案

我强烈建议不要使用 Activity 的奇怪标志。我也总是遇到使用 android API 的导航问题(并且仍然有问题,即使有 fragment )。

相反,我建议您解决内存问题。

你应该看 this video 关于内存泄漏,阅读 this about bitmaps .

简而言之,这里有一些提示:

  1. 尽量避免静态引用,尤其是当它们引用上下文时。

  2. 尽量避免引用上下文。

  3. 如果您必须引用上下文,请考虑使用 ApplicationContext。

  4. 记得在关闭 Activity 时关闭线程和对话框(如果需要)。尝试在不再需要时关闭服务。

  5. 优先使用静态内部类而不是非静态内部类(因为它们引用了包含类)。

  6. 记住匿名类也有对包含类的引用。

  7. 注意缓存的内容。尽量避免缓存包含对上下文的引用的类,例如 View 和可绘制对象。

  8. 如果可能,请尝试使用 softReference 和/或 weakReference 来引用引用上下文的“危险”对象。

  9. 在 android API 10 及以下版本中,记得回收您的位图。他们通常会占用很多内存。

  10. 如果一个 Activity 占用太多内存而您从它转到另一个 Activity,请考虑完成它并在需要时重新创建它,而不是返回到它的旧实例。

  11. 如果您使用任何第三方库或使用 native 代码(例如使用 NDK),请不要忘记在不需要时释放其内存。 dalvik 不会帮你太多。

关于android - 内存泄漏,单实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190457/

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