在应用程序出口上取消异步任务已解决

时间:2014-02-25 01:43:46

标签: android android-asynctask

我的应用程序似乎有问题。发生了什么事我想在用户关闭程序时杀死我的异步任务。我的理由是我有一个运行AsyncTask的StopWatch,当用户关闭程序时,Task继续运行并占用内存。我想使用这种方法取消任务:

 Task.cancel(true);

但我不知道何时在我的活动中打电话。我该怎么办?这是我正在运行的任务:

 public class timer extends AsyncTask<String, String, String> {

    @Override               
protected String doInBackground(String... params) {
    while(true){    
    while(milli < 1000 && running){ //running and other vars are arbitrary variables
            running = true;
            milli++;
            try{                
                Thread.sleep(1);                
            }
            catch(Exception e1){
                System.out.println(e1);
            }
            if(milli == 1000){
                milli = 0;
                secs++;         
            }
            if(secs == 60){
                secs = 0;
                mins++;             
            }
            if(mins == 60){
                hours++;
                mins = 0;
            }                       
            this.publishProgress(milli+":"+secs+":"+mins+":"+hours);            }               
        }
    return null;
    }   
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        TextView display = (TextView) findViewById(R.id.textView1);
                 display.setText(values[0]);
    }
    }
##### SOLUTION ################解决方案

我从每个人那里得到了一点点,但我最终自己想出来了。我覆盖了onStop活动方法,如下所示:

protected void onStop(){
super.onStop();
Task.cancel(true);
}

感谢所有贡献者!

##### SOLUTION ################解决方案

3 个答案:

答案 0 :(得分:2)

查看Activity生命周期。 this link上有一个很好的图表。

你想在onStart()/ onResume()中启动你的计时器,并在onStop()/ onPause()中停止它。

请注意,您需要在onStart / onStop或onResume / onPause上选择一致的对,以获得一致的行为。

答案 1 :(得分:2)

如果要停止异步任务,可以使用asyncTask.cancel(true/false); true指定android系统即使已经启动也停止此服务,     false指定android系统如果已经启动则不停止此任务。     如果您想在活动失去其互动时停止此服务,请将其写入onPause()     或者如果您想在活动时取消,请在onDestroy()中调用它     for more detail check this

答案 2 :(得分:0)

您可以实现此检查应用程序进程信息并在您的while中添加一个布尔值,以便可以杀死异步任务。

要获取您的应用信息,请尝试使用以下代码:

ActivityManager.getRunningAppProcesses()

点击此处查看更多信息:http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html

如果应用程序在前台运行,则使用以下代码行终止您的异步任务:

myAsyncTask.cancel(true);