Activity 绑定到它并为其提供要上传的文件列表,然后立即解除绑定。
我建议然后使用startService()
而不是bindService()
.
这些文件然后由服务在后台线程(异步任务)中一一上传。
这似乎更适合startService()
和IntentService
(或者,WakefulIntentService
如果您担心设备在上传过程中睡着了)。
我使用 startService() 在仪表板活动中启动此服务
如果您用于startService()
发送工作,则不需要这样做。
这样它就会一直运行,直到专门调用 stopService() 为止。
理想情况下,服务会自行关闭,就像这样IntentService
做一样。毕竟,只有服务才知道服务何时完成。
我的问题是我什么时候停止这项服务?
当你没有更多的工作要做的时候。IntentService
自动执行此操作。如果您真的想维护自己的线程池来完成工作,那么当您的工作队列为空并且所有线程都完成时,stopSelf()
从服务内部调用。
基本上我需要检查两个条件:1:所有文件都已上传
是的。
2:应用程序已退出
不,您的 UI 不应该关心服务是否正在运行。该服务应该照顾好自己。
此外,要退出应用程序,用户必须按仪表板活动上的后退按钮。
欢迎用户随意离开您的应用程序:BACK、HOME、RECENTS、a Notification
、来电等。
有什么建议么?
使用IntentService
. 通过调用 发送要上传的作业,将startService()
所有需要的数据打包到Intent
使用的 with startService()
(例如,额外的)中。做你的上传工作onHandleIntent()
。如果需要,可以使用LocalBroadcastManager
让应用程序中的 Activity 了解上传状态,这样如果他们愿意,他们可以在其 UI 中反映这一点。IntentService
将在其工作队列清空时自行停止。