我有一个实现fileuploader服务的类。 Activites绑定到它并为其提供要上载的文件列表,然后立即取消绑定。然后,服务在后台线程(asynctask)中逐个上载文件。
我使用startService()在我的仪表板活动中启动此服务,以便它一直运行,直到调用stopService()为止。
现在,我的问题是我什么时候停止这项服务?
基本上我需要检查两个条件:1:上传所有文件; 2:应用已退出。 此外,要退出应用程序,用户必须按下仪表板活动上的后退按钮。
我可以覆盖按钮按下并查询服务是否有任何文件,但我不想使用该方法。
有什么建议吗?
答案 0 :(得分:1)
Activites绑定到它并为其提供要上载的文件列表,然后立即取消绑定。
我建议然后使用startService()
而不是bindService()
。
然后服务在后台线程(asynctask)中逐个上传文件。
这似乎更适合startService()
和IntentService
(或a WakefulIntentService
,如果你担心设备在上传过程中入睡了)。
我使用startService()
在我的仪表板活动中启动此服务
如果您使用startService()
发送作品,则不需要这样做。
以便它一直运行,直到特别调用stopService()。
理想情况下,服务会自行关闭,就像IntentService
一样。毕竟,只有服务知道服务何时完成。
我的问题是我什么时候停止这项服务?
当你没有更多的工作要做。 IntentService
会自动执行此操作。如果您真的想要维护自己的线程池来完成工作,那么当您的工作队列为空并且所有线程都已完成时,请从服务中调用stopSelf()
。
基本上我需要检查两个条件:1:上传所有文件
是
2:app已退出
没有。您的UI不应该关心服务是否正在运行。服务应该照顾好自己。
此外,要退出应用程序,用户必须按下仪表板活动上的后退按钮。
欢迎用户离开您的应用,但请他们:返回,回家,近期,Notification
,来电等等。
有什么建议吗?
使用IntentService
。通过致电startService()
发送要上传的职位,将所有必需的数据打包到与Intent
一起使用的startService()
中(例如,附加内容)。您的上传工作是否在onHandleIntent()
。如果需要,可以使用LocalBroadcastManager
让您的应用中的活动了解上传状态,以便他们可以在用户界面中反映这些内容。 IntentService
将在其工作队列清空时自行停止。