我正在写一个应用程序,需要每分钟注册实际位置,无论是在前台还是后台。当用户决定停止跟踪时,我想收集收集的所有数据并使用它们。后台服务与数据供以后使用最佳实践
为此,我想到了一种架构,它试图节省电池,并尽可能提高效率。我想知道我的选择是否足够体面。这里是:
我从一个Activity通过startService()启动一个服务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的extras中。
服务S将在其内部数据结构中存储新数据(我的新位置坐标和其他信息)。无论应用程序是在前台运行还是在后台运行,一切都应该起作用
一旦用户通过活动中的按钮停止跟踪,后者将与服务进行通信以获取存储的数据,然后调用它stopService
您对此有何看法? 还有一个额外的问题:如果用户想要杀死应用程序,接收器会发生什么?它会打开应用程序吗?
很酷,感谢您的链接(特别是第一个!) – Bertuz
因此,回顾一下:我在某处(在我的活动中)创建了一个BroadcastReceiver并注册了它。之后,我可以访问它,这要归功于我保存的一个简单参考,并在我不再需要时取消注册。对? :-) 只是为了我的好奇心:我可以首先想到更重/更复杂任务的架构吗?有没有一个好的场景,我最好在接收器上使用服务? – Bertuz
这是正确的。在cae中,如果您需要进行繁重的工作,那么您可能应该创建一个服务并创建工作线程以便在此服务中处理。主要原因是不阻止(因为我记得Receiver不会被第二次调用,直到第一次调用没有完成)。 –