我使用了publishDelayed方法来刷新我的Activity,这很好用。但问题是即使按下后退按钮后延迟方法也会回调上一个活动..
//处理器延迟刷新活动后的30000毫秒
mHandler.postDelayed(new Runnable() {
public void run() {
dostuff();
}
}, 30000);
}
protected void dostuff() {
Intent intent = getIntent();
finish();startActivity(intent);
Toast.makeText(getApplicationContext(), "refreshed", Toast.LENGTH_LONG).show();
}
public void onBackPressed() {
super.onBackPressed();
finish();
mHandler.removeCallbacks(null);
}
protected void onStop() {
mHandler.removeCallbacks(null);
super.onStop();
}
答案 0 :(得分:6)
你只是使用它可能对你有所帮助
Runnable runobj=new Runnable() {
public void run()
{
dostuff();
}
};
mHandler.postDelayed(runobj, 30000);
}
public void onBackPressed()
{
super.onBackPressed();
mHandler.removeCallbacks(runobj);
}
答案 1 :(得分:3)
解决方法是:
在执行dostuff()方法时,只需检查Activity.isFinising()是否可以。如果它正在完成,只需返回。
当你按下后,活动将完成,之后如果doStuff()执行,它将不会做任何事情。
答案 2 :(得分:1)
mHandler.removeCallbacks(空);.您将null作为参数传递。传递一个Runnable onject。这应该有用。
public final void removeCallbacks (Runnable r)
使用上述内容。
在API级别1中添加 删除消息队列中任何待处理的Runnable r帖子。
编辑:示例
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);