19

常见场景 - 使用后台服务来轮询服务器的活动。与来自服务的活动(LocalService)进行通信 - Android最佳实践

该服务将通过AlarmManager定期运行,并执行任务的活动(用户点击一个按钮,去取从服务器的东西)。

我想知道这里的最佳实践。我认为最好的设计将是Android的本地服务例如: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

但本例中的活动有活动mBoundService一个参考,但不存在反向连接(服务有没有方法来调用活动) 。

什么是服务调用活动的最佳方式?

我是否使用Intents,BroadcastReceivers,Messages?怎么样?

回答

9

我认为最好的设计将是Android的本地服务例如:http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

我不会。使用您可以站立的最松的可能的联结。因此,平均而言,针对startService()的命令模式而不是与bindService()的绑定模式。值得注意的是,在处理配置更改(例如,屏幕旋转)时,绑定有点痛苦。

什么是服务调用活动的最佳方式?我是否使用Intents,BroadcastReceivers,Messages?怎么样?

Notify activity from service

+0

嗯,我实际上是基于它关闭您的教程:https://github.com/commonsguy/cw-andtutorials/tree/master/18-LocalService/Patchy/src/apt/tutorial有什么不好对这种做法? – paulpooch 2011-02-05 22:11:11

1

如果您需要紧密结合的活动之间使用bindService(),你沟通的方式取决于是谁发起的通信。

如果该服务被发起(因说,有一些新的信息共享报警),它通常会发送一个广播。

如果该活动是始发(因说,你比如“拿来从服务器的东西”),它可以异步使用的AsyncTask或类似的处理。也就是说,您可以从AsyncTask.doInBackground()中的服务器获取结果,并将结果发回到AsyncTask.onPostExecute中的活动。如果请求的操作预计需要很长时间 - 这种情况会稍微复杂一些 - 在这种情况下,我会将其解除耦合,然后从服务中发回广播。