我什么时候必须手动停止服务?

克里斯

我有一个从服务扩展的SendMessageService类。此类将聊天消息发送到后台的服务器。从服务返回时,我是否总是必须打电话stopSelf()

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent == null || !AppUtil.hasInternetConnection(this)) {
        return START_STICKY;
    }

    startID = startId;

    handler = new Handler();
    messageDatabase = MessageDatabase.getInstance(this);

    sendMessages();

    return super.onStartCommand(intent, flags, startId);
}

我必须打电话给stopself()上面return START_STICKY吗?

private void sendMessages() {
    // get all unsend messages
    new Thread() {
        @Override
        public void run() {
            synchronized (lock) {
                final ArrayList<Message> messages = new ArrayList<Message>();
                messageDatabase.getConditionBuilder().add(DatabaseHelper.KEY_MESSAGE_SENT + " = ?",
                        new String[] { String.valueOf(0) });
                messageDatabase.getConditionBuilder().setSortOrder(DatabaseHelper.KEY_MESSAGE_LOCAL_TIME + " ASC");
                messages.addAll(messageDatabase.getList());

                // ...
                sendMessageRecursive(0, messages);
            }
        }
    }.start();
}

private void sendMessageRecursive(final int index, final ArrayList<Message> messages) {
    if (index >= messages.size()) {
        stopSelf(startID);
        return;
    }

    // ...
}

stopSelf()在这种情况下我必须打电话吗?

常用软件

从服务返回时,我是否总是必须调用stopSelf()?

当您不再希望服务运行时,您可以致电stopSelf()(或stopService()从服务外部)致电Service没有一个明确的计划,不要仅仅在何时应该运行该服务,就不要将代码扔进一个仅在服务正在积极地向用户传递价值时才运行该服务

在这种情况下,我不确定您为什么不选择IntentService,因为它可以处理您的线程并且“我需要停止吗?” 给你的问题。

话虽这么说,给定您现有的代码,并假定该服务除此处未显示的内容外,您应该致电stopSelf()

  • onStartCommand()如果你没有真正打算做任何工作(因为你是那么不积极将价值传递给用户),而不是返回START_STICKY

  • 最后run(),当您完成工作时(因此将不再积极地向用户交付价值)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们什么时候应该手动配置广播地址?

我是否必须手动停止Java中的线程?

为什么我必须手动终止程序?

我必须手动启动bash

我什么时候必须使用#!/ bin / bash?什么时候必须使用#!/ bin / sh?

我什么时候创建服务类

为什么在列表中删除后我必须手动刷新页面?

为什么我们必须在扩展的PersistenceContext中手动flush()EntityManager?

如果我必须手动填充List <Object>,OneToMany和ManyToOne注释的意义是什么?

为什么我必须在ActionScript Project中手动添加Flex库

当我必须手动打开“旁路功能”时,为什么要强命名程序集?

为什么删除后我必须手动刷新页面?

手动停止的服务未正确停止

我是否必须手动删除KVO中的Observer

我什么时候必须在模块中使用 CONTAINS?

我怎么知道什么时候停止训练我的 CNN?

为什么我必须手动转义我的引号以便 http.request。发送 JSON 的 write 方法

使用zsh扩展名-为什么我必须手动输入“ zsh”才能使其显示?

什么时候需要使用笑话快照或手动检查?

什么是手动构建?

什么时候必须更改serialVersionUID?

什么时候必须编译C / C ++?

如果手动启动服务,是否可以通过启动来停止该服务?

什么时候必须使用应用程序服务器?

while(*(mychar ++))什么时候停止

什么时候停止训练咖啡?

memtest86 +什么时候停止?

我是否必须在 Xcode 11.5 中手动设置框架路径?

难道我们必须手动释放分配的字节缓冲区?