我正在活动中修改以下代码:
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
实例,不需要创建额外的实例