如何杀死Android中的PostDelayed方法

时间:2013-04-18 03:27:03

标签: android android-intent android-activity postdelayed

我使用了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();
    }

3 个答案:

答案 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帖子。

http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29

编辑:示例

Runnable runnable = new Runnable() {
@Override
public void run() {
    // execute some code
}
};

Handler handler = new Handler();  
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);