1
  1. 我有一个实现文件上传服务的类。Activity 绑定到它并为其提供要上传的文件列表,然后立即解除绑定。这些文件然后由服务在后台线程(异步任务)中一一上传。

  2. 我使用 startService() 在我的仪表板活动中启动此服务,以便它一直运行直到专门调用 stopService()。

  3. 现在,我的问题是我什么时候停止这项服务?

基本上我需要检查两个条件: 1:所有文件都已上传;2:应用程序已退出。此外,要退出应用程序,用户必须按仪表板活动上的后退按钮。

我本可以覆盖后退按钮并查询服务是否还有任何文件,但我不想使用该方法。

有什么建议么?

4

1 回答 1

1

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将在其工作队列清空时自行停止。

于 2012-12-29T14:47:36.077 回答