【发布时间】:2013-04-18 22:07:31
【问题描述】:
我有一个可以下载数 GB 视频的 Intent 服务。我有一个“停止”按钮,如果不小心点击“开始”或其他什么,可以停止下载。我知道这已被问过几次,但对我来说没有有效的答案。
我尝试拨打stopService(),但不起作用。那只是调用IntentService.OnDestroy()。
我尝试在onDestroy 中调用stopSelf(),也不起作用。
我尝试使用类似标志的东西,但如果 onHandleIntent 已经运行,它不会被调用,它会等到当前工作完成并执行。即使这会起作用,我也必须有一个像巨大的 if 语句这样的东西,这很糟糕
我唯一的选择真的是将其重写为常规服务吗?
//回答
public class SyncService extends IntentService {
boolean isCanceled;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("action")) {
// Set the canceling flag
isCanceled= intent.getStringExtra("action").equals("cancel");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
// Clean up the possible queue
if (intent.hasExtra ("action")) {
boolean cancel = intent.getStringExtra ("action"). Equals ("cancel");
if (cancel) {
return;
}
}
...
Get your inputStream from HttpUrlConnection or whatever
...
while ((bytesRead = in.read(buffer)) > 0) {
if (isCanceled) {
isCanceled = false;
break;
}
...
}
}
}
并触发它
Intent intent = new Intent(context, SyncService.class);
intent.putExtra("action", "cancel");
context.startService(intent);
【问题讨论】:
-
您可能会考虑从您的问题中删除您的解决方案,而是将其作为解决方案提供。
标签: android service intentservice