我使用LocationListener来获取位置。即使我的应用没有可见的活动/片段(例如用户按下主页按钮),这些位置也必须继续注册。
这些设计有何不同之处:
1)在活动中注册LocationListener。在onDestroy中取消注册。
2)在服务中注册LocationListener。用户必须从活动中停止此服务。
即使活动不可见,我的听众也会被召唤吗?
什么线程实际上会调用我的听众?我的app主线程还是系统线程?
如果在(1)和(2)中调用它,有什么优点和缺点?
非常欢迎更好的设计方案。
[编辑1开始]
我已经找到了关于哪个线程会调用侦听器的问题的答案。根据所使用的requestLocationUpdates的重载,它将是提供的Looper线程或调用线程(必须是Looper线程)。
来源:1
"如果使用了LocationListener但未指定Looper,则调用线程必须已经是Looper线程,例如调用Activity的主线程。如果使用LocationListener指定了Looper,则在提供的Looper线程上进行回调。"
这基本上意味着,如果我想卸载主线程,我需要为requestLocationUpdates提供一个Looper线程,或者在调用监听器时创建一个工作线程。我仍然没有看到从服务或活动中做到这一点的不同。
[编辑1结束]
答案 0 :(得分:0)
好吧,回到问题的基础 注册LocationListener活动与服务 - 如果我理解的那样 -
活动会在某种程度上被破坏,主要是在背景中 但只要没有任何关键问题并且操作系统将其关闭,服务将会延长使用寿命。 所以基本上就是差异
这里是2 Ref谈论这个, Android: Service stops when Activity is closed Android: Create service that runs when application stops
从您的服务中,您可以存储该位置或将其发送到服务器......