当从 "recent apps" 关闭应用程序时,多任务下载程序的后台服务停止
background service for multitask downloader stops when close app from "recent apps"
我有一个下载器应用程序项目,我正在使用服务 class 来管理下载任务并显示通知,如下所示:
问题:当我通过滑动关闭最近应用程序中的应用程序时,服务将停止。我不能将 startForeground
用于通知,因为我在一项服务中有多个通知。我喜欢 notify.setAutoCancel(true)
工作正常。
这是 AndroidManifest.xml 代码:
<service android:name=".Downloader" android:exported="false" android:enabled="true"
android:stopWithTask="false" />
这里正在启动服务:
public static void intentDownload(Context context , FileInfo info) {
Intent intent = new Intent(context, Downloader.class);
intent.setAction(ACTION_DOWNLOAD);
intent.putExtra(EXTRA_TAG, info.Tag);
intent.putExtra(EXTRA_APP_INFO, info);
context.startService(intent);
}
这里是 onStartCommand
:
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
String action = intent.getAction();
FileInfo fInfo;
String tag = intent.getStringExtra(EXTRA_TAG);
switch (action) {
case ACTION_DOWNLOAD:
fInfo = (FileInfo) intent.getSerializableExtra(EXTRA_APP_INFO);
download(fInfo);
break;
case ACTION_PAUSE:
fInfo = (FileInfo) intent.getSerializableExtra(EXTRA_APP_INFO);
pause(fInfo);
break;
case ACTION_CANCEL:
cancel(tag);
break;
case ACTION_PAUSE_ALL:
pauseAll();
break;
case ACTION_CANCEL_ALL:
cancelAll();
break;
}
}
return Service.START_STICKY;
}
我该如何解决?!
当您返回 START_STICKY
时,只要您 close/kill 应用程序,此服务就会停止,因为在应用程序关闭后,所有 Reference/Value 将变为 null
所有 Intent 作为以及变量等 STICKY
服务将无法获取 Intent 值。
要在应用终止后继续服务,请使用 return START_REDELIVER_INTENT
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_REDELIVER_INTENT;
}
看到同样的问题
我有一个下载器应用程序项目,我正在使用服务 class 来管理下载任务并显示通知,如下所示:
startForeground
用于通知,因为我在一项服务中有多个通知。我喜欢 notify.setAutoCancel(true)
工作正常。
这是 AndroidManifest.xml 代码:
<service android:name=".Downloader" android:exported="false" android:enabled="true"
android:stopWithTask="false" />
这里正在启动服务:
public static void intentDownload(Context context , FileInfo info) {
Intent intent = new Intent(context, Downloader.class);
intent.setAction(ACTION_DOWNLOAD);
intent.putExtra(EXTRA_TAG, info.Tag);
intent.putExtra(EXTRA_APP_INFO, info);
context.startService(intent);
}
这里是 onStartCommand
:
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
String action = intent.getAction();
FileInfo fInfo;
String tag = intent.getStringExtra(EXTRA_TAG);
switch (action) {
case ACTION_DOWNLOAD:
fInfo = (FileInfo) intent.getSerializableExtra(EXTRA_APP_INFO);
download(fInfo);
break;
case ACTION_PAUSE:
fInfo = (FileInfo) intent.getSerializableExtra(EXTRA_APP_INFO);
pause(fInfo);
break;
case ACTION_CANCEL:
cancel(tag);
break;
case ACTION_PAUSE_ALL:
pauseAll();
break;
case ACTION_CANCEL_ALL:
cancelAll();
break;
}
}
return Service.START_STICKY;
}
我该如何解决?!
当您返回 START_STICKY
时,只要您 close/kill 应用程序,此服务就会停止,因为在应用程序关闭后,所有 Reference/Value 将变为 null
所有 Intent 作为以及变量等 STICKY
服务将无法获取 Intent 值。
要在应用终止后继续服务,请使用 return START_REDELIVER_INTENT
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_REDELIVER_INTENT;
}
看到同样的问题