gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:43:27 25 4
gpt4 key购买 nike

我有一个从 Service 扩展的 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);
}

我是否必须在 return START_STICKY 上方调用 stopself()

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() 吗?

最佳答案

Do I always have to call stopSelf() when I return from my service?

当您不再希望服务运行时,您可以调用 stopSelf()(或从服务外部调用 stopService())。不要只是将代码扔进 Service 而没有非常明确的计划来确定该服务何时应该和不应该运行。 Only have a service running when it is actively delivering value to the user .

在这种情况下,我不太确定您为什么不选择 IntentService,考虑到它处理您的线程和“我需要停止吗?”给你的问题。

话虽这么说,鉴于您现有的代码,并假设除了您在此处显示的内容之外没有其他服务,您应该调用 stopSelf():

  • onStartCommand() 中,如果您实际上不打算做任何工作(因为您没有主动向用户提供值(value)),而不是返回 START_STICKY

  • run() 结束时,当您正在执行工作时(因此将不再主动向用户交付值(value))

关于android - 什么时候必须手动停止服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34105247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com