我有一个从服务扩展的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] 删除。
我来说两句