android - 后台服务提供数据供以后使用最佳实践

标签 android android-service

我正在编写一个应用程序,需要每分钟注册一次实际位置,无论是在前台还是后台。当用户决定停止跟踪时,我想收集所有收集到的数据并使用它们。

为了做到这一点,我考虑了一种试图节省电池并且尽可能高效的架构。我想知道我的选择是否足够体面。这是:

  1. 我通过startService()从一个Activity启动一个服务S。该服务将构造一个数据结构来保存数据以供以后使用。 Activity 和服务之间的通信也将通过 Messenger 对象创建。

  2. 我注册到将由接收器 R 管理的位置更新。它将是这样的:

    this.lm= (LocationManager) getSystemService(LOCATION_SERVICE);        
    Intent locationIntent= new Intent(getApplicationContext(),TravelPosition.class);
    PendingIntent locationPendingIntent= PendingIntent.getBroadcast(getApplicationContext(), 0, locationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 7000, 1, locationPendingIntent);
    
  3. 每次触发接收器 R 时,它都会与服务 S 进行通信。我正在考虑使用 startService(Intent),将坐标放入 Intent 的 extras 中。

  4. 服务 S 将在其内部数据结构中存储新数据(我的新位置坐标和我用它们生成的其他信息)。无论应用程序是在前台还是后台运行,一切都应该正常工作

  5. 一旦用户通过 Activity 中的按钮停止跟踪,后者将与服务通信以获取在此之前存储的数据,然后调用 stopService

你对此有何看法? 还有一个额外的问题:如果用户想要终止该应用程序,接收者会发生什么?它会重新打开应用程序吗?

最佳答案

首先,在开始编写代码之前,您对架构的思考是正确的:)

其次,我建议阅读以下链接:

http://developer.android.com/guide/topics/location/strategies.html http://devdiscoveries.wordpress.com/2010/02/04/android-use-location-services/

第三,在您的情况下,您不需要服务S。您可以注册接收器R并在该接收器R中执行您需要的所有操作(包括处理和保存数据)。在这种情况下,如果您退出应用程序,您仍将继续接收位置更新。

关于android - 后台服务提供数据供以后使用最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555014/

相关文章:

android - 如何在 Firebase Firestore 中的多个字段上制作范围过滤器?

android - 正确使用后台服务/广播接收器

android - 在应用程序 onCreate 之前调用服务 onCreate

android - 当应用程序被 android 中最近的应用程序杀死时的回调监听器

java - Android Studio 推送标签到远程

Android Studio,Junit4加入classpath后仍无法解析Junit

android - 在 Android 上通过 NFC 进行 BLE 配对

Android 在出错时显示来自服务的对话框

安卓服务 : What happen at the end of Activity life?

java - 无法实例化提供程序 org.glassfish.jersey.client.JerseyClientBuilder