我已经在Android中制作了一些应用程序并注意到我经常使用静态方法.
例如,我有一个扩展PreferenceFragment的Class.在这个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等内存管理编程语言中),如果使用不正确,静态方法可能会导致“内存泄漏”.我引用了“内存泄漏”,因为它们不是内存泄漏的纯粹定义,就像在C中你忘记从内存中删除一些项目而丢失对它们的引用(因此以后无法清除它们 – 至少不容易),但更像是在不再需要时继续使用引用并阻止GC为您清除内存.网上有很多文章都涉及这个问题(搜索“Android静态内存泄漏”)以及关于SO的许多其他问题(请参阅[static][Android][memory-leaks] tags),所以我不会讨论这个问题.
对于您的特定情况,为了避免可能的内存泄漏,您可以使用MyFragmentClass.this.getActivity()从您的匿名OnClickListener对象绑定的Fragment对象中获取Activity,将其强制转换为,例如,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引用您将此代码放入的片段的类:)
标签:android,static,static-methods
来源: https://codeday.me/bug/20190609/1207068.html