何时以及如何退出文件上传服务

时间:2012-12-29 12:45:48

标签: android

  1. 我有一个实现fileuploader服务的类。 Activites绑定到它并为其提供要上载的文件列表,然后立即取消绑定。然后,服务在后台线程(asynctask)中逐个上载文件。

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

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

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

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

    有什么建议吗?

1 个答案:

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