【问题标题】:Which Context? To avoid Memory Leaks哪个上下文?避免内存泄漏
【发布时间】:2016-07-25 08:24:50
【问题描述】:

我知道这个问题已经被问过很多次了,但仍然有很多像我这样的新开发人员觉得这很困难。要避免memory leaks,应该使用哪个context?。 在某处我发现我们应该getApplicationContext() 和某处尝试尽可能使用context-activity。另外http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html

Try using the context-application instead of a context-activity

例如

将哪个上下文传递给RecyclerView AdapterCustom Dialog Class

我发现的一种方法是以这种方式将上下文传递给适配器

recyclerview.setAdapter(new YourAdapter(new WeakReference<Activity>(ActivityName).get()));

我传递上下文的方式对吗?

请做一个详细的解释,以便其他人也受益。 谢谢

【问题讨论】:

    标签: android memory-leaks android-context


    【解决方案1】:

    将哪个上下文传递给 RecyclerView 适配器或自定义对话框类

    在处理 UI 问题时,请始终传递Activity

    我传递上下文的方式对吗?

    RecyclerView 中使用时,您不需要WeakReferenceActivity

    为了避免内存泄漏,应该使用哪个上下文?

    一般来说这是无法回答的。最简单的基本规则是:当您担心Context 可能位于static 范围内时使用Application 作为Context,例如在static 数据成员引用的对象中,或诸如在一个线程中。否则,请使用更专注的Context(例如,您的Activity、您的Service)。

    Dave Smith's blog post on contexts 是我发现的关于该主题的最佳单页资源。

    【讨论】:

    • 但是如果我使用弱引用上下文会产生什么问题吗?
    • @SonaliPawar:您可能会遇到一些与性能相关的问题,因为您会经常遇到锁。
    • 如果先生我必须做与网络相关的工作或显示来自适配器的对话框,活动上下文是否合适?
    • @SonaliPawar:正如我在回答中所写的那样,在处理 UI 问题时,如对话框,请始终使用 Activity。 “网络相关工作”对Context 没有内在需求。重要的不是他们是“网络相关的”,而是他们在做什么以及他们花了多长时间。异步工作有许多模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多