从班级调用活动

时间:2017-12-08 09:00:49

标签: java android memory-leaks

在我的应用程序中,有一个Activity类和一个帮助器类。活动类可以访问显示分数的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?
  }
}

我发现了两种方法,但它们并不是很好。一种方法是将活动实例传递给辅助类。其他方法是声明TextView静态。但是,两者都容易受到内存泄漏的影响。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以使用界面

来实现这一目标
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);
    }
}

当您从帮助程序类调用updateScore时,它将从活动中调用updateScore并将分数传递给它,您可以更新MainActivity中的TextView。