我正在活动中修改以下代码:

new Handler().postDelayed(new Runnable() {
 public void run() {
    txtStatus.setText("hello");
  }
}, 1000);

到:
static Runnable myRunnable = new Runnable() {
public void run() {
   txtStatus.setText("hello");
};

new Handler().postDelayed(myRunnable, 1000);

这显然不起作用,因为我们引用的是一个非静态变量。
这也不起作用:
public void setText() {
  txtStatus.setText("hello");
}
static Runnable myRunnable = new Runnable() {
public void run() {
   setText(); // doesn't work
   MyActivity.this.setText(); // still doesn't work

};

new Handler().postDelayed(myRunnable, 1000);

那么,如何重写我的初始示例以使用静态类而不是匿名内部类(以避免潜在的内存泄漏)?

最佳答案

试试这样的:

private Runnable myRunnable = new Runnable() {
    public void run() {
        txtStatus.setText("hello");
    }
};

// somewhere in code
txtStatus.postDelayed(myRunnable, 1000);

// in onPause or onDestroy
txtStatus.removeCallbacks(myRunnable);

笔记:
这样可以避免内存泄漏,因为如果调用run
我用onDestroy替换了removeCallbacks,因为每个new Handler()都有自己的txtStatus实例,不需要创建额外的实例

09-30 15:39
查看更多