android - 静态方法中可以持有Activity对象吗

浏览:29日期:2022-12-10

问题描述

静态方法中可以持有Activity对象吗,这么做不好吧GC的销毁Activity时会不会因为静态方法持有引用而销毁不了啊

问题解答

回答1:

关于内存泄漏问题建议阅读文章Android内存泄露——全解析和处理办法

回答2:

题主你看一下下面这两种情况就明白了。

public class A{ public static a(Activity activity){// do something }}

public class B{ private static Activity mActivity; public static b(Activity activity){mActivity = activity;// do something }}

A中的静态方法a,传入了一个Activity对象,然后方法结束,Activity的引用activity生命周期结束,这样不会造成泄露,没问题。

B中的静态方法b,传入一个Activity对象,然后B的成员变量mActivity接收了这个引用。这个静态成员变量会一直存在在进程中,这样就会造成内存泄露。

回答3:

方法内的变量都是局部变量, 方法完了就不持有的。

回答4:

当然可以啊,没感觉有什么不好的

回答5:

补充一下楼上的回答,如果 class B 是一个静态内部类,非要持有 activity 的引用的话,可以考虑弱引用。

static class B { private WeakReference<Activirty> ref;public void setRef(Activity activity) {this.ref = new WeakReference<>(activity); }public void doSomething(){if (ref.get() != null){ ref.get().doSomething();} }}回答6:

建议楼上的弱引用方式,官方对于Handler的使用,也是这样的方式

回答7:

讲道理的话,显然可以这样用

但是!!! 请不要这样,楼上都说了,内存泄漏

相关文章: