Android:我应该使用BroadcastReceiver vs Messenger vs BindService vs Handler吗
我知道这看起来有很多问题。但事实并非如此(尽管我也可能是错的) 我有一个长期运行的服务(每5秒在一个单独的线程中使用blutooth套接字池在OBD2适配器中运行一次数据)。Android:我应该使用BroadcastReceiver vs Messenger vs BindService vs Handler吗,android,broadcastreceiver,android-service,android-broadcastreceiver,android-service-binding,Android,Broadcastreceiver,Android Service,Android Broadcastreceiver,Android Service Binding,我知道这看起来有很多问题。但事实并非如此(尽管我也可能是错的) 我有一个长期运行的服务(每5秒在一个单独的线程中使用blutooth套接字池在OBD2适配器中运行一次数据)。 此服务正在同一进程中运行,并且是前台服务 用户通过活动启动此服务。然后,它连接到蓝牙设备,并开始共享数据并将数据保存到SQLiteDataBase。 然后,用户可以最小化活动并执行其他操作。 当他返回(如果有,他可以通过通知区按钮停止服务)到应用程序时,应用程序会检查服务是否正在运行,如果正在运行,则会启动另一个活动,显示
此服务正在同一进程中运行,并且是前台服务 用户通过活动启动此服务。然后,它连接到蓝牙设备,并开始共享数据并将数据保存到SQLiteDataBase。 然后,用户可以最小化活动并执行其他操作。
当他返回(如果有,他可以通过通知区按钮停止服务)到应用程序时,应用程序会检查服务是否正在运行,如果正在运行,则会启动另一个活动,显示从OBD2提取的数据 我的问题是,在这个可视化活动和我应该使用的服务之间,我指的是推荐的或正确的服务:
- 本地广播?这就是我正在使用的。每次服务提取一些数据时,每次提取数据时都会发送一个包含该数据的广播。然后在
方法中调用onReceive
以更新相应的视图runOnUiThread
- 信使?据我所知(从未使用过),我应该从活动向服务发送一个Messenger(很像一个处理程序),在服务中,它应该发送带有数据提取的消息。但是如果活动被破坏,我会从中得到一个
(就像我说的,用户可以将活动最小化,然后得到GCed)。因此,我可能需要一种方法,在每次创建活动时将Messenger发送到服务,并检查每次使用服务中的Messenger是否可以(如果可能的话,我从未使用过)RemoteObjectException
- 绑定服务?当我打开活动,然后直接从服务中的方法获取数据时,是否应该绑定到服务?但这可能意味着我会在活动中有另一个线程每次都从服务获取这些数据,对吗
- 处理程序?(现在我意识到我不知道Messenger和Handler之间的区别,应该是“当服务在另一个进程中运行时使用Messenger,否则使用Handler”)
编辑:忘了提一下,我宁愿只使用支持库和android框架的东西,我还在学习android,我想了解它自己的类中发生了什么。bond service,使用绑定本地服务pattern@pskink谢谢你的评论!你想详细说明为什么这样更好吗?请看@pskink我已经看到了这个b以前,但现在我说服自己,这样做比每隔几秒钟不向任何人发送广播要好。在活动中运行新线程以便我可以从服务中连续获取结果是否有问题?为什么要轮询数据?只需通过调用activity方法从服务中发送数据,与调用方法相同从您的活动中删除服务方法