Android:在Activity和服务中使用Listener有什么区别?

时间:2014-05-09 08:23:48

标签: android service listener

我使用LocationListener来获取位置。即使我的应用没有可见的活动/片段(例如用户按下主页按钮),这些位置也必须继续注册。

这些设计有何不同之处:

1)在活动中注册LocationListener。在onDestroy中取消注册。

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

即使活动不可见,我的听众也会被召唤吗?

什么线程实际上会调用我的听众?我的app主线程还是系统线程?

如果在(1)和(2)中调用它,有什么优点和缺点?

非常欢迎更好的设计方案。

[编辑1开始]

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

来源:1

"如果使用了LocationListener但未指定Looper,则调用线程必须已经是Looper线程,例如调用Activity的主线程。如果使用LocationListener指定了Looper,则在提供的Looper线程上进行回调。"

这基本上意味着,如果我想卸载主线程,我需要为requestLocationUpdates提供一个Looper线程,或者在调用监听器时创建一个工作线程。我仍然没有看到从服务或活动中做到这一点的不同。

[编辑1结束]

1 个答案:

答案 0 :(得分:0)

好吧,回到问题的基础 注册LocationListener活动与服务 - 如果我理解的那样 -

活动会在某种程度上被破坏,主要是在背景中 但只要没有任何关键问题并且操作系统将其关闭,服务将会延长使用寿命。 所以基本上就是差异

这里是2 Ref谈论这个, Android: Service stops when Activity is closed Android: Create service that runs when application stops

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