作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道在 Android 中不推荐使用内部类,因为它们持有对封闭类的引用。然而,在 Java 中,外部类只有在内部类不再被引用时才会被 GC。这意味着,在 Android 中,如果您在外部 Activity 类中有一个对内部类的非静态引用,则内部类的存在时间不能比外部 Activity 类长,因为 Activity 只有在不持有引用时才会被销毁到内部类了(至少这是我的推断)。那么使用非静态内部类的问题是什么(因为如果您从 java 推断它们显然不能比外部 Activity 存在更长的时间)?我错过了什么吗?
谢谢!
最佳答案
考虑这个简单的例子
class Leaker
{
public static Object leakedObj;
}
class MyActivity extends Activity
{
public class MyInnerClass { ... }
void onCreate(Bundle savedState)
{
Leaker.leakedObj = new MyInnerClass();
//The activity now won't be GCed until Leaker.leakedObj is cleared.
}
}
您可以轻松地在 Activity 上下文之外传递内部非静态类。只要您不将内部类传递给 Activity 生命周期之外的对象,就应该没问题。但肯定有可能通过内部类泄露您的 Activity 。
关于java - 内部类 : Android vs Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10112163/
我是一名优秀的程序员,十分优秀!