在Android中使用静态方法?

时间:2014-10-23 18:17:09

标签: android static static-methods

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

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

    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。这是做我想做的好方法吗?或者有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

您可以使用称为镜像的Java属性。 下面我使用该属性来完成活动。

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

答案 1 :(得分:2)

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

对于您的特定情况,为了避免可能的内存泄漏,您可以使用{{1从Activity对象绑定您的匿名Fragment对象的OnClickListener将它投射到MyFragmentClass.this.getActivity()(就像这里的情况一样)并在其上调用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 } }); 指的是您将此代码放入的片段类:)