Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 简单套接字客户端应用程序的模式或最佳实践_Android_Sockets_Client_Chat - Fatal编程技术网

Android 简单套接字客户端应用程序的模式或最佳实践

Android 简单套接字客户端应用程序的模式或最佳实践,android,sockets,client,chat,Android,Sockets,Client,Chat,(也有人问过这个问题。) 首先,为冗长的文本和在一个问题中问了这么多问题表示歉意。我认为这样做是最好的,因为它们是相互关联的,而且我认为任何有这类应用经验的人(Android socket客户端,它与服务器保持持久连接以发送/接收消息)都能够回答所有或许多问题。基本上,我是在就一些设计决策征求意见,我不确定“推荐的安卓方式”是什么 我正试图确定在Android中实现此类应用程序(套接字客户端)的最佳方式。它将使用诸如WebSocket、socket.IO、TCP等套接字通信技术来保持与远程服务器

(也有人问过这个问题。)

首先,为冗长的文本和在一个问题中问了这么多问题表示歉意。我认为这样做是最好的,因为它们是相互关联的,而且我认为任何有这类应用经验的人(Android socket客户端,它与服务器保持持久连接以发送/接收消息)都能够回答所有或许多问题。基本上,我是在就一些设计决策征求意见,我不确定“推荐的安卓方式”是什么

我正试图确定在Android中实现此类应用程序(套接字客户端)的最佳方式。它将使用诸如WebSocket、socket.IO、TCP等套接字通信技术来保持与远程服务器的持久连接以交换信息。我没有提到具体的案例用途,只是它可能不是聊天应用程序,因为它的首选技术是推送通知(GCM或类似的东西)。我正在考虑一个应用程序,只要用户“登录”它,它就会保持连接打开

连接不应绑定到应用程序的活动,即用户离开应用程序后仍可以接收消息(最终创建通知)

为了定义这样一个应用程序,我试图回答以下问题:

  • 连接处理(连接/断开连接)和消息发送是否应委托给单独的类(例如单例)

  • 选择广播将接收到的消息传递给当前的
    活动
    ,似乎没有问题;有没有更合适的解决方案?即使应用程序架构相当简单,事件总线或绑定到
    服务
    是否更可取

  • 考虑到连接必须在进程终止时保持(系统通常会这样做以释放内存),最好的方法是使用重写的
    startCommand()
    方法返回
    START\u
    (这允许
    服务
    在系统内存可用时立即重新启动)?这是最合适的方法吗?我想是的,因为在
    AlarmManager
    中设置定期连接检查在这种情况下听起来是不必要的,并且使用
    startForeground()
    并不能防止应用程序被终止(这只会降低这种情况发生的可能性)并向用户显示应用程序正在运行的意外通知

  • 当我们就设计达成一致意见时,我认为需要在其中添加唤醒锁,以防止设备在处理传入/传出数据时保持/进入睡眠状态。但我不确定如何将它们添加到最终设计中,我要求对此进行澄清。我考虑到以下额外考虑:

    a) 传入的数据预计会唤醒设备,但不能保证在设备返回睡眠前得到充分处理

    b) 当与服务器的连接可用时,设备处于休眠状态(由连接更改广播发出信号)这一事实不应阻止在应用程序中排队等待发送的大量传出消息,但我不知道如何在这种设计中添加唤醒锁,以确保队列得到充分处理

    c) 我的协议库可能已准备好与Android一起使用(即在一个或多个非UI线程中处理i/O),但其回调可能无法保证在非UI线程中运行(库可能会将它们委托给UI线程)。这可能会影响我如何通过代码处理唤醒锁

  • 我是否需要保持一个积极运行的线程循环以保持连接打开?我怎样才能避免这种情况

  • 如对这些问题有任何反馈,我们将不胜感激