ImM*_*han 20 java sockets android android-lifecycle socket.io
我计划在这个库中为基于聊天的应用程序在android中实现Socket.io .据我所知,图书馆看起来很不错.我想知道如何在整个应用程序中始终保持单个套接字连接?在这里,我列出了实现的方法,其中我需要最好和最稳定的方式.
三种方式
MainApplication类扩展了Application
通过这种方式,我们有一个很好的范围,即在主线程(或应用程序的生命周期)中维护套接字连接,并且每当从活动中需要套接字实例时我们都可以轻松获得它.但它的主要线索也是问题所在.它可能会阻止主线程.
BoundService
通过这种方式,我们可以将服务与活动绑定,我们可以简单地使用它.在单独的线程中执行是实现IO /网络调用的方法.但是,交叉处理转移比在同一过程中直接访问更昂贵.
独生子
在Singleton中维护连接也很有意义.但是我们不知道实例何时被进程杀死,因为它在活动生命周期中不起作用.
如果我有意义,请帮助我.如果没有评论出来.
我已经给出了更适合我的答案.
首先,应用程序onCreate()与您的用例无关,因为在非服务代码中首次启动时,您无法在后台运行线程.
此外,我建议使用Google Cloud Messaging而不是创建自己的机制.最好是设备的电池寿命和更少的代码供您处理.
如果您确实希望完全自己实现该聊天,那么这Service是您唯一的选择.你也可以将它与单身人士结合起来,但我不建议采用这种方法.您可以使用广播并BroadcastReceiver在您Service和之间进行通信Activity,我认为它比绑定服务更容易,因为绑定到服务是异步的,与简单广播相比,它会造成很多混乱.
socket连接的服务按照Ofek Ron提到Service的BroadcaseReceiver是比一个更好的主意BoundService.因为它是一个保持沟通的繁琐过程.而且我也推荐pub/sub广播的方式,Otto或者EventBus(我自己建议使用Square的Otto,这是干净而且非常出色的api).
奥托的优点
1.简洁的API
2.您可以订阅和发布/任何Activity,Fragment,Service类.
3. 解耦.(您必须在代码中尽可能少地耦合).
还有一处是使用START_STICKY在 onStartCommand()它被破坏掉后启动服务.请参阅此参考.
最好的做法是在MainApplication扩展中启动服务Application.因为当存在内存约束或用户强行从堆栈中关闭应用程序时,应用程序将被终止.因此,onStartCommand()如果我们已在Activity中实现,则不会频繁调用.
您只需Application.LifeCycleCallbacks在MainApplication类中实现即可实现在线状态,该类具有活动的大部分生命周期回调,并将在回调中得到通知.通过这种方式,您可以在Online没有任何锅炉板代码的情 (如果有人需要帮助,请告诉我).
最佳实践是实现,IntentService因为它在一个单独的线程中运行.我保证哪个会提供最佳性能,因为它由android本身处理,而不是像我们创建的线程.
| 归档时间: |
|
| 查看次数: |
7547 次 |
| 最近记录: |