gpt4 book ai didi

android - 在 Android 中使用静态方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:45 25 4
gpt4 key购买 nike

我已经在 Android 中制作了一些应用程序并注意到我经常使用静态方法。

例如,我有一个扩展 PreferenceFragment 的类。在此 PreferenceFragment 中,我在 Button 上设置了一个 onClick 事件。

    Button btn = new Button(getActivity().getApplicationContext());
btn.setText("Save");
v.addView(btn);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SettingsActivity.finishActivityWithResultOkey();
}
});

然后我在我的 SettingsActivity 中调用一个静态方法来完成这个 Activity。这是做我想做的事情的好方法吗?或者有更好的解决方案吗?

最佳答案

在 Android 中(在 Java 等内存管理编程语言中,更准确地说,static 方法如果使用不当会导致“内存泄漏”。我引用了“内存泄漏”,因为它们不是内存泄漏的纯粹定义,就像在 C++ 中,您忘记从内存中删除一些项目并丢失对它们的引用(因此以后无法清除它们 - 至少不容易),但更像是在您不再需要引用时继续引用,并阻止 GC 为您清理内存。网上有很多文章都涉及这个问题(搜索“Android static memory leak”),还有很多关于 SO 的其他问题(请参阅 [static][Android][memory-leaks] tags),所以我不会深入探讨这个。

对于您的特定情况,为了避免可能的内存泄漏,您可以从 Fragment 对象中获取 Activity,您的匿名 OnClickListener对象通过使用 MyFragmentClass.this.getActivity() 绑定(bind),将其转换为例如 SettingsActivity(就像这里的情况一样)并调用 .finishActivityWithResultOkey( ) 就可以了。最好也保护你的石膏。

下面是代码的示例:

btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final Activity activity = MyFragmentClass.this.getActivity();
if(activity instanceof SettingsActivity)
((SettingsActivity)activity).finishActivityWithResultOkey();
else
throw new IllegalStateException("This OnClickListener requires a SettingsActivity to start the fragment containig it"); //helps with debugging
}
});

请注意:MyFragmentClass 指的是您要将此代码放入的 fragment 的类 :)

关于android - 在 Android 中使用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534660/

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