java– 这是一个持有静态引用和ActivityContext的有效方法吗?我为什么不这样做?

java– 这是一个持有静态引用和ActivityContext的有效方法吗?我为什么不这样做?,第1张

概述我有一个抽象的BaseFragmentActivity类,我的android应用程序中的所有活动都扩展了.在这个类中,我将当前运行的活动的静态引用维护为sCurrentActivity.在我的onStart()生命周期回调中,我这样设置:publicabstractclassBaseFragmentActivityextendsFragmentActivity{pri

我有一个抽象的BaseFragmentActivity类,我的android应用程序中的所有活动都扩展了.在这个类中,我将当前运行的活动的静态引用维护为sCurrentActivity.在我的onStart()生命周期回调中,我这样设置:

public abstract class BaseFragmentActivity extends FragmentActivity {     private static BaseFragmentActivity sCurrentActivity;    public static BaseFragmentActivity getCurrentActivity(){        return sCurrentActivity;    }    @OverrIDe    protected voID onStart() {        super.onStart();        sCurrentActivity = this;    }

使用它,从代码中的任何地方我都可以通过调用以获取当前活动/上下文:

BaseFragmentActivity.getCurrentActivity()

所以我读过的所有内容都说我不应该持有对活动/上下文的静态引用.但是如果这个静态变量在所有活动之间共享,那么每次我开始一个新的Activity时,我是否真的泄漏了一个Context?
我已经阅读了Romain Guy关于避免内存泄漏的帖子(http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html),在AndroID开发者频道上观看了关于泄漏视图(https://youtu.be/h7qHsk1nWKI和https://youtu.be/BkbHeFHn8JY)的性能模式视频,我有理由相信这是不好的做法.但有人可以帮助我理解泄漏的原因和地点的确切原因,如果有的话.我想提出一个案例来消除这种情况,但我需要一个比“我认为它正在泄漏一个背景”更强有力的论点.

编辑:
为清楚起见,这是我继承的代码库,其中所有内容都非常紧密耦合和混乱,此函数几乎可以在任何地方查找上下文对象.内部对话框按钮回调以在片段内部触发新意图,甚至(原因未知)在片段内部获取视图以获取父活动内部的视图!我需要以他们理解的方式为我们的产品所有者提供关于新功能的重构努力.

解决方法:

您在给定时间内最多泄漏一个活动实例.如果你添加

 @OverrIDe    protected voID onStop() {        super.onStop();        sCurrentActivity = null;    }

那你就不会泄漏任何东西.

但我真的不明白为什么你需要这样做,你想要实现什么?

编辑:在你解释你想要实现的内容之后,扩展Application并保持静态引用并从任何地方访问它似乎更合理,我认为这有三个原因更好:

>只要您的应用程序正在运行,应用程序实例就会一直保持活动状态,有时甚至当系统没有运行时系统也不会释放它以便它可以为您的应用程序的下一次启动做好准备.
>我打赌Activity对象比Application对象有更多的内存开销
>当你的应用程序对象被杀死时,我99%肯定你的进程也存在,所以静态引用不会导致泄漏.

一些代码示例:

public class App extends Application {    public static App context;    public voID onCreate() {       super.onCreate();       context = this;    }}
总结

以上是内存溢出为你收集整理的java – 这是一个持有静态引用和Activity / Context的有效方法吗?我为什么不这样做?全部内容,希望文章能够帮你解决java – 这是一个持有静态引用和Activity / Context的有效方法吗?我为什么不这样做?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1119218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存