【问题标题】:Stopping a Handler Based Runnable after AsyncTask在 AsyncTask 之后停止基于处理程序的 Runnable
【发布时间】:2014-06-24 10:58:04
【问题描述】:

我对 Android 编程还很陌生。

对我的问题的简单解释:

我有一个异步任务,每 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() 一遍又一遍地执行。

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

【问题讨论】:

    标签: java android android-asynctask handler runnable


    【解决方案1】:

    你必须打电话

    handler.removeCallbacks(r).
    

    【讨论】:

    • 是的,这行得通。虽然,如果我在主屏幕中键入一个有效的条目,然后按返回按钮返回主屏幕,那么正确的进程永远不会终止,并且每 20 秒继续在后台运行。我该如何阻止它?
    • 如果它有效,那么请接受正确的答案。你的第二个问题似乎无关(没有一些代码我怎么知道),我认为你最好打开一个新问题......
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2018-09-10
    • 2013-09-29
    • 2019-02-04
    • 2021-11-19
    • 1970-01-01
    • 2023-04-08
    • 2016-10-26
    相关资源
    最近更新 更多