在AsyncTask之后停止基于Handler的Runnable

时间:2014-06-24 10:58:04

标签: java android android-asynctask handler runnable

我对Android编程很新。

我的问题的简单解释:

我有一个异步任务,根据此runnable每20秒收集一次基于JSON的数据:

Handler handler = new Handler();

final Runnable r = new Runnable() {
    public void run() {
        mTask = new JSONParse();
        mTask.execute();
        handler.postDelayed(this, 20000);
    }
};

我想如何阻止它?

我的问题的详细说明:

在这个异步任务中,我检查数据是否可用,如果不可用,我首先调用

返回主屏幕
mTask.cancel(true);

然后在onCancelled()方法中如下:

protected void onCancelled() {
        // TODO Auto-generated method stub
        super.onCancelled();
        mTask.cancel(false);
        pDialog.dismiss();
        displayWrongPhoneToast();
    }

其中displayWrongPhoneToast()是一个简单的函数,如下所示:

public void displayWrongPhoneToast() {
    Toast.makeText(getApplicationContext(),
            "Sorry! Enter at least one field to continue.",
            Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(TabActivity.this, MainActivity.class);
    startActivity(intent);
}

我遇到的问题是,处理程序导致runnable在后台执行,这会一次又一次地使应用程序请求数据并导致displayWrongPhoneToast()一遍又一遍地执行。

我尝试了一些我在网上找到的方法来阻止runnable,但它拒绝了。任何帮助表示赞赏。谢谢:))

1 个答案:

答案 0 :(得分:0)

你必须致电

handler.removeCallbacks(r).