具有asynctask的android服务未完全停止

具有asynctask的android服务未完全停止,android,service,android-asynctask,Android,Service,Android Asynctask,我有一个下载服务,可以用asynctask下载文件。有一个按钮用于暂停和恢复。当我点击“暂停”时,它应该会破坏服务以取消当前任务。我试图通过使用 Intent download=new Intent(Download.this, DownloadService.class); getApplicationContext().stopService(download); 还有推杆 stopself(); 在onDestroy(){}函数中。我的问题是DownloadService被销毁时,Do

我有一个下载服务,可以用asynctask下载文件。有一个按钮用于暂停和恢复。当我点击“暂停”时,它应该会破坏服务以取消当前任务。我试图通过使用

Intent download=new Intent(Download.this, DownloadService.class); getApplicationContext().stopService(download);
还有推杆

stopself();

在onDestroy(){}函数中。我的问题是DownloadService被销毁时,DownloadTask没有取消。请帮助找出问题的根源。谢谢。

我必须查看更多代码才能确定发生了什么


我想知道使用IntentService而不是服务是否能更好地为您服务。你考虑过了吗?

< P>你必须在停止服务之前取消AcsiCask任务。因为AsyncTask将一直工作到应用程序进程关闭

因此,您必须关闭HttpRequest以在AsyncTask内中断此阻塞调用。在AsyncTask中将HttpClient实例作为属性保存。在您的服务中定义一个中断函数,如下所示

public void stopTaskAndService(){
    yourAsyncTask.yourHttpClient.getConnectionManager().shutdown();
    yourAsyncTask.cancel(true) // prevent the onPostExecute() call
    stopself();
}

你如何下载这个文件?对于http请求或DownloadManager?http请求,我正在使用服务。因此,我的onStartCommand()代码=intent.getIntExtra(“代码”,0);link=intent.getStringExtra(“nLink”);fileName=intent.getStringExtra(“ntitle”);行=intent.getLongExtra(“行”,0);如果(代码==1){percent=intent.getStringExtra(“perce”);total=intent.getStringExtra(“total”);download=intent.getStringExtra(“download”);}System.out.println(行);Toast.makeText(这是“MyService已启动”,Toast.LENGTH_LONG.show();执行(新字符串[]{link,fileName});退货服务。开始时不粘;我正在mainactivity中停止此服务,因为Intent download=newintent(download.this,DownloadService.class);getApplicationContext().stopService(下载);打破感谢您的回复,我正在查看。我无法键入yourAsyncTask.yourHttpClient.getConnectionManager().shutdown();我只是关闭了连接,让它工作。