如何在一个独立于用户界面线程的服务中使用android定位包



我有一个小的Android应用程序,我一直在工作,记录GPS数据到我的SD卡在GPX文件。我目前有一个主活动,它启动一个服务来完成所有的后台工作。该服务被保存在前台的通知栏中,使其成为最不可能被操作系统杀死的东西。目前,我要求以最大频率从服务中更新位置,以获得最准确的路线。我遇到的问题是我的用户界面动作缓慢/奇怪。如果我错了,请纠正我,但我得出的结论是,我在应用程序的主线程中有太多事情要做。我的下一个想法是尝试将执行获取和记录数据的服务移动到一个单独的线程。我是Java/Android的新手,所以与单独线程交互的整个主题对我来说很难理解。最初在研究中,我遇到了IntentServices,它应该使线程更容易,但从我读到的这些似乎不太适合与Android定位包混合,因为它们运行的时间不够长。我觉得我在网上搜索这个话题时一直在兜圈子。我迫切需要一些关于如何为我的程序服务实现以下功能的指导:

  1. 从主线程中分离线程
  2. 获取和存储数据必须是最不可能被操作系统杀死的事情,一旦启动就无限期地运行(不要担心电池,我会在运行应用程序时将设备插入电源)
  3. 最终我将需要与用户界面交互的能力

谢谢你提供的任何帮助!

这是一个常见的问题,我已经完成了很多

在启动器或main() (Android称为一个活动)你做尽可能少(这相当于保存他们给你的refs和可能设置一些其他的东西,只要你在那里),不要掉到一个长时间运行的活动

一个服务正是你所需要的,但你所做的不是试图将它泵入"保持它"的状态,而是实现空值检查并根据需要进行处理——试图"修复"一台机器,使其按照你想要的方式运行,实际上包括取消你对主线程的保持,并让它在符合应用程序的一般约束的情况下尽可能快地运行。

要做到这一点,你可以简单地写一个服务-读取所有可用的-然后扩展该服务并实现Runnable,然后从Activity构造函数中运行该代码的构造函数并执行new head(yourClass).start();在onCreate()中检查Thread.isRunning(),然后再启动它…

Service将在某处有一个onCompletion()调用——它将通过一个接口

这些都是在Android中完成的比如startactivity for result然后你只需调用UI中的东西或者想办法让GUI在某个时候被调用然后检查Service是否完成然后在GUI中报告

最新更新