Android:无法停止前台服务

3

简单来说,我想使用一个服务通过互联网上传文件。

我创建了一个带有绑定和startService的服务。我创建了一个前台服务来显示进度。

问题是,在上传完成后,我调用stopForeground(true)然后调用stopSelf,但通知没有被移除,(可能)服务也没有被终止。

服务类的代码:

public class UploaderService extends Service {

    // ...

    public void finishUpload(File audioFile, File eventsData) {
        LogWrapper.d(TAG, "finishUpload");
        mUploadHelper.upload(audioFile, eventsData)
        // consider this just a callback:
                .subscribe(uuid -> {
                    // Log is printed but service is not stopped
                    LogWrapper.d(TAG, "finishUpload.subscribe");
                    stopForeground(true);
                    stopSelf();
                }, LogWrapper::fatalError);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        NotificationCompat.Builder builder = NotificationsManager.getDefaultBuilder(this)
                .setProgress(0, 0, true)
                .setContentText(intent.getStringExtra(EXTRA_TOPIC_NAME))
                .setContentTitle("Uploading data to server");
        // first creating a notification with uuid,
        // after POST /post call, post.uid will be used.
        startForeground(DEAFULT_NOTIFICATION_ID, builder.build());
        return START_REDELIVER_INTENT;
    }

    @Override
    public IBinder onBind(Intent intent) {
        LogWrapper.d(TAG, "onBind " + intent);
        return mUploaderBinder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        LogWrapper.d(TAG, "onUnbind " + intent);
        intent.putExtra(EXTRA_TOPIC_NAME, mUploadHelper.getTopic().name);
        startService(intent);
        return false;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mUploaderBinder = new UploaderBinder();
    }

    public class UploaderBinder extends Binder {
        public UploaderService getService() {
            return UploaderService.this;
        }
    }
}

请尝试使用 stopSelf - Anoop M Maddasseri
为什么要在 onUnbind 中调用 startService(intent); - pskink
为了保持服务的运行。即使活动已经完成,我也希望服务仍然处于活动状态;因此我将其设置为前台服务。 - Vedant Agarwala
1
因此,使其同时“启动”和“绑定”,更多信息请参见这里 ^F“将服务绑定到已启动的服务” - pskink
1个回答

0

虽然我在文档中找不到,但是startService命令应该从服务外部即从Activity中调用。我在绑定服务之前从我的Activity中调用它,结果如预期。

我可能正在经历一种未定义的行为-服务正在启动但没有停止。我希望有人能给我一个更好的解释,为什么会发生这种情况,以及这确实是正确的做法。

非常感谢@pskink指导我走上了正确的道路。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接