0

我有一个实现按钮单击以尝试停止我的 AsyncTask 的 Activity,它是服务的内部类并在我的服务内部执行。

主要活动

            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)

4

1 回答 1

0

您的活动如何连接到服务?您的活动应该只与绑定到它的底层服务(参考:绑定服务)而不是Service's进行通信AsyncTask

在您的实例中,您的本地 IBinder 实现应该公开一个cancelTask()方法或类似的东西。当活动需要停止服务下正在完成的工作时,活动代码应该获取对服务的引用(这将在活动连接到服务时发生,参考:)onServiceConnected然后调用服务cancelTask

然后,该服务将停止它自己的 AsyncTask 引用。

于 2013-02-15T10:02:36.520 回答