我正在制作APK,但我遇到了问题。我的APK在完成后发送GET请求。我有一个用于发送GET请求(GPS)的asynctask类。问题是当我再次启动应用程序时,我需要杀死上一次启动的后台进程。我在manifest.xml中使用了use-permission android:name =“android.permission.RESTART_PACKAGES”并使用了权限android:name =“android.permission.KILL_BACKGROUND_PROCESSES”,并使用了以下代码:
if (URLUtil.isValidUrl(URL_Pet_GET) && URLUtil.isValidUrl(URL_Host)){
//Get_Backgnd.cancel(true); not working
context.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(String.valueOf(process.processName));
//not working
//ActivityManager activityManager = (ActivityManager) context.getSystemService("activity");
//activityManager.restartPackage(packageName);
//not working
pet_get_backgrnd Get_Backgnd = new pet_get_backgrnd();
Get_Backgnd.execute(); //Send GET request that I need stop on next execution of apk
}
private class pet_get_backgrnd extends AsyncTask<Context, Object, Object>{
/*@Override
protected void onPreExecute() {
cancel(true);
}*/ //not working
@Override
protected Object doInBackground(Context... params) {
//send Get requests
}
}
如何在下次执行APK时取消Get_Backgnd的执行?或者相同 如何取消上次执行APK的Get_Backgnd的执行?
由于
答案 0 :(得分:0)
AsyncTask上的cancel()
方法实际上并不取消执行,而是设置一个可以使用isCancelled()
方法查看的标志。您需要在doInBackground()
中手动检查该标志,并写下您希望如何处理取消的任务。 See this answer for an example of this and some useful links on canceling AsyncTasks.
为了确保您的AsyncTask不会保留,您可以将调用设置为在onPause()
或onDestroy()
生成的活动中取消,无论您认为哪个更合适,以便一旦它不再相关,任务就会被杀死。重要的是,在实际创建任务的Activity中完成此操作,您将无法在后续运行的APK中取消任务,因为您不再具有对它的引用。这与isCancelled()
的人工检查相结合,可以帮助您实现所需的行为。