我的应用需要后台服务,我可以在那里提交任务。这些任务可能非常通用,可能涉及下载源,一次获取位置或获取资源。此服务需要与活动进行最少的交互,应该在应用程序启动时启动,如果没有待处理的任务则应该退出队列中。
这是个好主意吗?我该如何设计这样的服务?欢迎提出所有建议
答案 0 :(得分:4)
希望这种架构能够帮助您:
如果您想在活动结束后执行任务,请使用startService()
否则如果您想在活动结束后立即终止所有任务,请使用bindService()
。
当您调用startservice()
时,如果服务已在运行,则不会调用其oncreate()方法,但每次调用onStartCommand()
时都会调用startservice()
。您可以使用此属性。
您可以实现一个静态方法,可以从您的活动中访问该方法以将任务放入其中,当您以静态方法接收调用时,您可以启动执行任务的线程。
注意:不要忘记释放服务中的所有资源(线程等),因为android不会为你做。
如果您的活动已完成,那么在完成任务后,您可以使用stopSelf()
来获取服务并释放所有资源。
如果符合您的需要,您可以尝试使用IntentService。查看this了解详情。
答案 1 :(得分:0)
如果您需要一次处理一个请求,那么IntentService可能会有所帮助。它们会自动排队到工作线程。
答案 2 :(得分:0)
Android库Goro可能会有帮助。
它允许您组织多个队列中的任务并在服务上下文中运行它们。
默认情况下,它使用AsyncTask
中用于实际执行任务的相同线程池。