gpt4 book ai didi

java - Android 实现静态或非静态 fragment 接口(interface)

转载 作者:行者123 更新时间:2023-11-30 11:26:29 25 4
gpt4 key购买 nike

假设我有这个 fragment :

public class FragmentA extends Fragment {

public interface CallerProxy {
public void publishParams(Object... dataParams);
}

private CallerProxy mCallerProxy;

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof CallerProxy) {
this.mCallerProxy = (CallerProxy) activity;
}
}

@Override
public void onDetach() {
super.onDetach();
this.mCallerProxy = null;
}

protected void sendCustomMessage(Object... objects) {
if (mCallerProxy != null) {
mCallerProxy.publishParams(objects);
}
}

}

将接口(interface)定义为静态或非静态有什么区别?即使我将 CallerProxy 声明为静态或不声明,在父 Activity 中我也会有这个:

public class MyProxyActivity extends FragmentActivity implements CallerProxy {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(...) and other relevant code
}

@Override
public void publishParams(Object... dataParams) {
// /
}
}

据我所知,如果接口(interface)被声明为静态的,那么接口(interface)将绑定(bind)到 FragmentA 类对象,如果我不将其声明为静态的,那么它将绑定(bind)到 FragmentA 实例对象 - 这会导致内存泄漏吗?

如果接口(interface)不是静态的,可能会出现什么问题,为什么?

最佳答案

定义为类成员的 interface 已经(隐式地)声明为 static 因此您提到的两种情况之间没有任何区别。另外,作为引用,引自 Java language specifications :

成员接口(interface) (§8.5) 是隐式静态的,因此它们永远不会被视为内部类。

关于java - Android 实现静态或非静态 fragment 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19790499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com