我正在编写一个需要每分钟注册实际位置的应用程序,无论是前台还是后台。当用户决定停止跟踪时,我想收集所有收集的数据并使用它们。
为此,我考虑过一种试图节省电池的架构,并尽可能提高效率。我想知道我的选择是否合适。这是:
我通过startService()从Activity启动服务S.该服务将构建一个数据结构以保存数据供以后使用。活动和服务之间的通信也将通过Messenger对象创建。
我注册了将由接收方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);
每次触发接收器R时,它都会与服务S通信。我正在考虑一个startService(Intent),我将坐标放在Intent的附加内容中。
服务S将在其内部数据结构中存储新数据(我的新位置坐标和我用它们生成的其他信息)。无论应用程序是在前台运行还是在后台运行,一切都应该有效
一旦用户通过活动中的按钮停止跟踪,后者将与服务通信以获取存储的数据,然后调用stopService
答案 0 :(得分:2)
首先,在开始编写代码之前,你是正确的思考架构:)
其次,我建议阅读以下链接:
http://developer.android.com/guide/topics/location/strategies.html http://devdiscoveries.wordpress.com/2010/02/04/android-use-location-services/
第三,在您的情况下,您不需要服务S.您可以注册接收器R并在此接收器R中执行您需要的所有操作(包括处理和保存数据)。如果您退出应用程序,您仍将继续接收位置更新。