如何在安卓中终止PostDelayed方法

7

我使用postDelayed方法来刷新我的Activity,这很有效。但问题是,即使我按下返回按钮,postdelayed方法仍然会回调到先前的Activity。

//用于30000毫秒后延迟刷新Activity的handler

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();
    }

1
http://stackoverflow.com/q/16050807/931982 是自己问题的副本,请勿这样做。 - stinepike
3个回答

6

你只需使用它,它可能会帮助你

   Runnable runobj=new Runnable() {
public void run()
{
 dostuff();

 }
  };
 mHandler.postDelayed(runobj, 30000);
   }
public void onBackPressed() 
{
super.onBackPressed();
mHandler.removeCallbacks(runobj);
}

3
一个解决方法是:
在执行dostuff()方法时,只需检查Activity.isFinishing()并进行处理。如果它正在结束,就返回。
当您按下返回键时,Activity将被结束,之后如果执行doStuff(),它将不会做任何事情。

1

mHandler.removeCallbacks(null);。您正在将null作为参数传递。请传递一个Runnable对象。那应该可以工作。

public final void removeCallbacks (Runnable r)

请使用以上内容。

API level 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);

2
必须是特定创建的“Runnable”实例。 - dmon
@dmon同意了,我编辑了我的答案。 - Raghunandan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接