android中的启动和停止按钮

时间:2011-04-08 14:26:19

标签: android android-asynctask

嘿家伙我正在开发一个应用程序,其中我运行asopTas在asycTask点击按钮,我想停止该任务点击其他按钮,如启动和停止但问题是一旦循环启动它不会听取任何其他事件,好像阻止ui线程我该怎么办?

4 个答案:

答案 0 :(得分:3)

您需要检查isCancelled以确定您的AsyncTask是否已被取消。

在你的while循环中:

if (isCancelled()) {
    break;
}

这样你就不会无限期地陷入那个循环中。

答案 1 :(得分:0)

尝试使用AsyncTask.cancel()

答案 2 :(得分:0)

您可以尝试以下方法:

  1. 当您点击停止按钮时,设置一个布尔值ivar(我们称之为isStopped)= true
  2. 在AsyncTask的onProgressUpdate函数中,检查isStopped的状态。如果确实如此,请跳出while循环。
  3. 你需要在你的AsyncTask中保留对你的Activity的引用才能做到这一点,所以为它做一个构造函数,它接受你的Activity类型的对象。

答案 3 :(得分:0)

我认为您需要实现它:

在您的活动中声明此内容,以便在OnClickListener中提供

onGoingTask ex;

然后在你的onCreate中输入这段代码,其中startButton和stopButton都是你应用上的按钮

startButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        ex.doInBackground();
        ex = new ReloadHistoryTask();
        ex.execute();
    }
});
stopButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        ex.cancel(true);
    }
});

然后,再往下,在同一个文件中,您将获得AsyncTask的声明

private class onGoingTask extends AsyncTask<Void, Void, Long[]> {
    @Override
    protected Long[] doInBackground(Void... params) {
        Long[] myCount = {0L, 0L, 0L};
        while(sflag==0) {    
            System.out.println("in while");
            //code for gps data collection
            myCount[2]++;
        }
        return myCount;
    }
}

我觉得这样的东西应该适合你,你可以拿出Long []数组,如果你不需要它,我只是把它放在那里,因为我使用它,我觉得它可能很方便你了: - )