我正在使用AsyncTask()与服务器进行通信,我每隔3秒就会收到并回复它。
我知道当我关闭我的应用程序时,通信仍在继续,因为我正在使用Toast来弹出答案。唯一的方法是强制关闭应用程序。有没有办法完全关闭它?
谢谢!
答案 0 :(得分:3)
假设您在调用<?php
$file_name = "video.mp4";
$subject = 'X';
$message = 'X';
$headers = 'From: x@x.com' . "\r\n" .
'Reply-To: x@x.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["video"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["video"]["tmp_name"], $target_dir . $file_name)) {
mail($_POST["email"], $subject, $message, $headers);
}
}?>
时呼叫AsyncTask.cancel()
。
我建议您保留一个变量,以了解您是否使用onDestroy()
。使用此变量决定何时AsyncTask
任务。
如果任务未在cancel()
上运行cancel
,则其他任务正在运行,然后在onStop()
上。
请记住onDestroy()
并在调用cancel()
时释放所有资源。
答案 1 :(得分:1)
取决于你说“关闭”时的意思。当你关闭应用程序时,你的意思是将其暂停到后台?或退出。如果要在应用程序在onStop()上进行后台调用时停止异步任务,并在重新启动时继续使用onResume()。如果您的意思是通过应用切换器退出应用并强行关闭,请使用onDestory();
这是api文章的链接,详细解释了这一点。它被称为活动生命周期,了解它为Android应用程序编程的概念至关重要。
https://developer.android.com/guide/components/activities/activity-lifecycle
所以在onStop覆盖中,你会做类似的事情 yourAsyncTaskObj.cancel(真);
@Override
protected void onStop() {
// place your code before super.onStop()
yourAsyncTaskObj.cancel(true);
super.onStop();
}
答案 2 :(得分:1)
考虑在整个app中制作泛型。你应该在Application.ActivityLifecycleCallbacks
类中实现Application
并避免基于Activity生命周期的所有泄漏。
@Override
public void onActivityResumed(Activity activity) {
Log.d("ActivityResumed");
}
@Override
public void onActivityPaused(Activity activity) {
Log.d("ActivityPaused");
}
@Override
public void onActivityStopped(Activity activity) {
Log.d("ActivityStopped");
}
根据您的要求取消后台任务。
此外,我建议您使用Retrofit,Volley或任何其他良好的第三方网络库,以避免类似的其他情况。它使管理代码变得非常容易。