Android中静态方法,在Android中使用静态方法?

我已经在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值