【问题标题】:How to clean view object?如何清理视图对象?
【发布时间】:2013-08-25 13:32:27
【问题描述】:

我正在开发一个应用程序,其中我有一个活动和许多视图子类。 当我需要更改视图时,我正在调用加载屏幕(这是另一个视图类)并在单独的线程上加载新视图(使用 runnable),当它准备好时,我正在使用 SetContentView 函数设置视图。

现在我面临的问题是内存不足。因为每个视图都有自己加载的对象列表。

现在我的问题是,如何释放内存,这样我就不会遇到out of memory 异常?

附: 我尝试将旧视图归零并回收它拥有的所有位图,然后调用System.gc(),尽管到目前为止还没有运气。

【问题讨论】:

  • 你的 JVM 可以访问的内存量是多少?
  • @RaptorDotCpp,堆大小限制为 32mb,如果我超过这个数量,我会出现内存不足错误。我需要以某种方式杀死以前的视图(可用内存)并放置新视图。

标签: java android memory-management view


【解决方案1】:

尝试使用意图来显示不同类中的视图。

【讨论】:

  • 嗯,再想想,也许你是对的,我会尝试使用意图,看看它是否对我有帮助
  • 好吧,我已经通过两个活动和一个单独的进程 (android:process) 解决了这个问题。一个活动扮演加载器的角色,而另一个则显示视图。因此,当我在视图中并需要将其更改为其他视图时,我会发送一个带有新视图的意图以加载(标识符)和显示该视图的活动的进程 ID。然后在我的加载器活动中,我使用包含视图的活动终止进程并重新启动它。
【解决方案2】:

视图不在焦点时执行thread.interrupt()

【讨论】:

  • @Jack Mwangi,我把它放在哪里?它对我有什么帮助?我不需要停止我的Runnable,而是释放上一个视图的内存。
【解决方案3】:

在想您可以尝试将视图拆分为不同的活动类。然后您可以使用 startActivityforResult(intent) 启动一个活动,当您完成视图后,只需调用 finish()。它将从中删除资源记忆。

【讨论】:

  • 谢谢,我将测试您的想法并返回结果。
猜你喜欢
  • 2020-04-22
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2017-08-05
  • 2011-04-16
  • 2011-01-21
相关资源
最近更新 更多