我的应用程序似乎有问题。发生了什么事我想在用户关闭程序时杀死我的异步任务。我的理由是我有一个运行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 ################解决方案答案 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);