我有一个Activity,它实现了一个单击按钮,试图停止我的AsyncTask,这是一个服务的内部类,并在我的服务中执行。
主要活动
if (s.equals("Stop scanning")) {
fullscan.cancel(true);
stopService(new Intent(AnalyzeActivity.this, ScanService.class));
txtView.setText("Scanning is stopping...");
txtView.setText("Scanning stopped");
but.setText("Start scanning");
}
服务的AsyncTask(fullscan)doInBackground
if (int i = 0; i < myList.size(); i++ )
if (isCancelled()) {
return null;
}
}
return null;
但即使在致电fullscan.cancel(true)
之后,它似乎也没有被召唤。
答案 0 :(得分:0)
您的活动如何连接到该服务?您的活动应仅与绑定到它的基础服务(reF:Bound Services)进行通信,而不是Service
的{{1}}。
在您的实例中,您的本地IBinder实现应该公开AsyncTask
方法或类似的东西。当活动需要停止在服务下完成的工作时,活动代码应该获得对服务的引用(这将在活动连接到服务时发生,ref:cancelTask()
)然后调用服务onServiceConnected
。
然后,服务将停止它自己的AsyncTask,它引用了它。