Android服务:将UI中启动的事件/任务排队,直到服务启动



我有一个ListView,它显示一些实体(所有实体都是相同类型)的信息。每个实体都有一个状态,根据状态的不同,ListItem可以有不同的外观。此外,单击ListItem会根据实体的状态执行特定操作。

当实体处于状态A时,应将其传递给使用它来执行某些操作的服务。

只有在需要时才应启动该服务。因此,如果用户点击ListItem,服务就会启动,实体应该被传递给它。然后服务会进行一些操作,实体的状态就会改变。这将导致实体所属ListItem的外观发生变化。

  • 简单情况:服务已经启动并绑定,因此当用户单击服务方法的ListItem以传递实体可以直接调用
  • 困难情况:服务未启动,用户点击ListItem

处理第二种情况的最佳方法是什么?将实体保存在队列中,等待服务启动并通过队列,或者有更优雅的方法吗?在服务启动之前,用户可能已经单击了几个ListItems。

还是让服务一直在后台运行以避免这种情况更好?那么问题是,服务的绑定是否足够快,以至于如果用户单击ListItem,那么对服务的引用就已经绑定了。

非常感谢!

Service有多结实?如果它不是一直在后台线程中做事情,那么我认为最有响应性、最有效的方法是在包含ListViewActivity可操作的同时,保持与Service的绑定。这样,你就不会有"棘手的案子"。记住:当用户在前台积极使用你的应用程序时,这显然是他们想要设备资源的用途。

不过,要做一个好公民,在onPause()上解除服务绑定,并在onResume()中重新绑定,以便在需要时杀死Service。我的意思是,它可以在任何时候被杀死,但这是作为一个负责任的安卓公民的一部分。

不要忘记Service实体默认情况下在主线程中进行所有处理。如果你的Service确实对你所说的onClick()处理执行了繁重的工作,你我希望它在一个单独的线程中操作,甚至在清单中放一个不同的进程。

相关内容

最新更新