Android:在活动和服务中使用侦听器有什么区别?

Android:在活动和服务中使用侦听器有什么区别?,android,service,listener,Android,Service,Listener,我正在使用LocationListener获取位置。即使我的应用程序没有可见的活动/片段(如用户按Home按钮),也必须继续注册这些位置 这些设计的区别是什么: 1在活动中注册LocationListener。在onDestroy中注销它 2在服务中注册LocationListener。用户必须从活动中停止此服务 即使活动不可见,也会调用我的侦听器吗 什么线程将实际调用我的侦听器?我的应用程序主线程还是系统线程 如果在1和2中都调用它,那么它的优点和缺点是什么 我们非常欢迎更好的设计方案 [编辑

我正在使用LocationListener获取位置。即使我的应用程序没有可见的活动/片段(如用户按Home按钮),也必须继续注册这些位置

这些设计的区别是什么:

1在活动中注册LocationListener。在onDestroy中注销它

2在服务中注册LocationListener。用户必须从活动中停止此服务

即使活动不可见,也会调用我的侦听器吗

什么线程将实际调用我的侦听器?我的应用程序主线程还是系统线程

如果在1和2中都调用它,那么它的优点和缺点是什么

我们非常欢迎更好的设计方案

[编辑1开始]

我已经找到了关于哪个线程将调用侦听器的问题的答案。根据所使用的requestLocationUpdates的重载,它将是提供的循环器线程或调用线程(必须是循环器线程)

资料来源:

如果使用LocationListener但未指定循环器,则调用线程必须已经是循环器线程,例如调用活动的主线程。如果使用LocationListener指定了一个循环器,那么将在提供的循环器线程上进行回调

这基本上意味着,如果我想卸载主线程,我需要为requestLocationUpdates提供一个循环器线程,或者在调用侦听器时创建一个工作线程。我仍然不认为从服务或活动中这样做有什么区别


[编辑1结尾]

好吧,让我们回到问题的基础 注册LocationListener活动与服务-如果我理解清楚的话-

活动在某个时候会被破坏,主要是在后台 但只要不发生任何关键事件,并且操作系统将其关闭,该服务的寿命就会更长。 所以基本上这就是区别

这里有两个裁判在谈论这个,


从您的服务中,您可以存储位置或将其发送到服务器…

请参见,如果您想随时获取位置,您可以使用Alaram Manager在服务中实现它。但请记住,它会消耗更多的电池电量。这是第1点的优点和缺点。对于第2点,解决方案不符合您的要求。请澄清。我需要尽可能多的位置,比如说谷歌MyTracks或者Endomondo sports trainer之类的。选择2,然后选择Alarm Manager,我不会跟随。我的目标是尽可能多地接收地点。我通过注册一个侦听器来实现这一点,然后我得到一个onLocationChanged调用。我不想定期做任何事情,所以我可以用AlarmManager做什么?哦。那么请忽略我关于使用Alaram Manager的建议。REST2可以实现,但即使我的所有活动、片段、服务和其他应用程序组件都已销毁,我的应用程序主线程仍在运行,我的侦听器仍在LocationManager中注册。如果我错了,请纠正我。但这基本上就是我看不出区别的原因。请注意,可能没有区别。我只是想知道是否有。我的问题本来可以更清楚。我不确定,你怎么才能把主线作为活套呢?因为据我所知,UI线程是主线程,所以当你从活动中注册时,以null作为循环器,它在UI线程上,这是主线程…是的。因此,如果我不提供任何内容,只是从我的主线程注册我的侦听器,主线程将在侦听器上执行调用。是的,但是如果主线程关闭,-我认为-服务将不会,因此您在这里获得了优势。。。