Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从类调用活动_Java_Android_Memory Leaks - Fatal编程技术网

Java 从类调用活动

Java 从类调用活动,java,android,memory-leaks,Java,Android,Memory Leaks,在我的应用程序中,有一个活动类和一个助手类。活动类可以访问显示分数的TextView。助手类需要定期更新活动类中的分数 public class MainActivity extends Activity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContent

在我的应用程序中,有一个
活动
类和一个助手类。活动类可以访问显示分数的
TextView
。助手类需要定期更新活动类中的分数

public class MainActivity extends Activity
{
  TextView textView;

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    textView = (TextView) findViewById(R.id.textView);
    Helper helper = new Helper();
  }

  void updateScore(int score)
  {
    textView.setText(score + "");
  }

  /* ... */
}

public class Helper
{
  int score = 0;

  void updateScore()
  {
    // what to do here?
  }
}

我找到了两种方法,但都不是很好。一种方法是将活动实例传递给helper类。另一种方法是声明
TextView
静态。但是,两者都容易发生内存泄漏。有更好的方法吗?

您可以通过使用接口来实现这一点

public class MainActivity extends Activity implements MainActivity.Callback {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        textView = (TextView) findViewById(R.id.textView);
        Helper helper = new Helper(this);
    }

    @Override
    void updateScore(int score) {
        textView.setText(score + "");
    }

    interface Callback {
        void updateScore(int score);
    }

    /* ... */
}

public class Helper {
    int score = 0;
    Callback callback;

    public Helper(Callback callback){
        this.callback = callback;
    }

    void updateScore() {
        callback.updateScore(score);
    }
}

当您从helper类调用updateScore时,它将从activity调用updateScore并将分数传递给它,您可以在MainActivity内部更新TextView。

如果您正在不断地将分数更新到activity,则会出现回调(接口)更好的是,它还可以解决您的上下文问题。您可以在此处使用数据绑定来直接在视图上反映您的模型属性。你可以跟我说:谢谢。我来看看。