`

关于对android接受到推送消息后的处理机制的思考

 
阅读更多

       正如我们所知道的那样,有着如下的使用场景:

       当我们使用QQ或者YY的时候,服务器推送的消息,我会不由的想到,他们是怎么进行处理的?

      

       问题1:用户进行登录后,不知道是从服务器拉取消息还是服务器推送过来未读的消息?

                    那么服务器是否需要保存用户的未读消息?当使用电脑客户端,手机客户端,电脑客户端和手机客户端同时使用的时候,推送消息是怎么进行处理的?

       猜想:当有消息来时,服务器就把消息进行id分类,分别推送到手机客户端和电脑客户端。但是如果用户不在线的时候怎么办?我认为多半是先判断用户是否在线,如果不在线,就把消息进行标注,当有用户的心跳包存在时,就把标注的未读消息给推送过去。个人认为不太可能是客户端主动去得到消息,因为如果用户的消息很少的话,每次主动去得到消息,不仅会浪费客户端的内存,而且每次每隔一段时间主动访问的时候服务端都要进行查询,大量浪费了服务器的内存。如果是一台机子的话,那么还可以,但是如果有成千上万的用户时,就不值得。

       得出结论:服务器对未读消息进行标注。当有心跳包存在时,就进行推送,如果同时存在客户端和服务器端的时候,就对两个同时推送,如果只有一个,那么就对一个进行推送,然后去掉标注。

       

       问题2:由问题三,我们可以了解到时推送过来的消息,那么客户端如何在不同的界面对这些消息进行处理?

       猜想:如果是我做的话,就把收到的消息扔给服务,然后界面和服务绑定。原因是:android中的一个服务,都是后台serviceManager进行新建的一个线程,我们可以再里面做任何的事情,不用影响到软件的运行。但是如果有两个界面和这条消息相关联的话,比如消息列表,和消息聊天框,怎么才能做到一条推送过来的消息,同时对两个界面的数据源进行修改?究竟是先保存到数据库中,再对数据源进行修改?还是先保存到数据库中,然后从数据库中得到消息,再进行界面修改?

                   个人认为,选择先保存到数据库,再对数据源进行修改更好。因为,如果每次都从数据库中读取消息,还得判断,这样浪费了很多的资源,万一数据库中的数据很多,那就问题就会很突出了。这样做的好处在于,可以根据推送的界面不同,来对数据的保存。例如:如果是消息界面,我就可以得到当前的消息,然后把未读消息数目加一,然后保存该消息为未读。如果是聊天消息,我也可以得到当前的消息,然后把保存该消息为已读。但是还是有一个疑问,当在聊天框的时候,这条消息已经读取了,那么当我返回的时候,怎么显示当前的最新消息?这个时候消息界面和service已经解除绑定了,为什么要用绑定拉,原因是绑定可以在界面直接Binder重复利用,但是Biner与服务器进行交互只有唯一一个Binder,所以我们要用这个Binder做很多的事情。

             下面的图形可以解释他们之间的关系:



 

             

  • 大小: 29 KB
分享到:
评论

相关推荐

    Android-(2).zip_android_安卓社交

    例如,微博SDK可能提供了一个分享图文信息的方法,你需要准备好要分享的内容,然后调用这个方法,由SDK负责将内容推送到微博服务器并显示在用户的微博时间线上。 此外,为了优化用户体验,你需要考虑如何处理网络...

    Android核心分析

    1. **外部特性**:即用户所能感知到的功能和服务,如应用程序的启动与切换、消息推送等。这些特性构成了用户对Android的认知基础。 2. **内部特性**:则涉及到系统的底层实现,比如进程管理、内存分配等技术细节。...

    android开发入门

    了解这些基础知识能让你对Android运行机制有深入的理解,从而更好地编写高效的应用程序。 接下来,书中会逐步引导你安装和配置Android开发环境,包括Android Studio——Google官方推荐的集成开发环境(IDE),以及...

    百度圆盘桌面、六边形自由布局

    "BaiduPushDemo_v1.zip"可能是百度推送服务的示例代码,虽然主要关注的是消息推送功能,但可能也包含了一些界面布局的实现,值得参考。最后,"SexangleView.zip"很可能包含实现六边形布局的代码,可以作为研究自定义...

    Android 简易微信客户端和服务器源码-IT计算机-毕业设计.zip

    6. **WebSocket**:为了实现即时通讯,服务器可能使用WebSocket协议,它允许服务器主动推送数据到客户端。 最后,对于毕业设计而言,还需要关注论文写作部分。你需要将开发过程、遇到的问题及解决方案、技术选型的...

    基于Android的名著助读系统设计与实现.pdf

    推荐机制是系统智能化的体现,通过分析用户行为和兴趣,推送适合的阅读内容。分享功能则鼓励用户交流阅读体验,形成互动学习的社区。 文章详细描述了系统的设计理念、架构以及实现方法。首先,系统设计考虑了用户...

    2019 秋招腾讯安卓开发工程师面经(1).doc

    在2019年的秋季招聘中,腾讯对安卓开发工程师的...面试过程中,面试官更看重候选人的思考过程和对Android整体框架的理解,而不仅仅是答案。因此,全面理解和掌握这些知识点对于成为一名优秀的安卓开发工程师至关重要。

    山东大学 软件学院 移动互联复习题.zip

    了解Android的通知机制,包括本地通知和远程推送。 7. **安全性与权限管理**:理解移动应用的安全问题,如数据加密、安全编码、权限管理等。熟悉Android的权限模型,包括运行时权限和权限组。 8. **性能优化**:...

    NewsApp:基于Miscrosoft AI项目ProjectOxford中的Recognition Emotion做的,主要是基于用户的面部表情来推动不同类别的新闻。Emotion API可以参考:https-源码客

    NewsApp的核心功能在于其情感驱动的新闻推送机制。当用户开启应用时,前置摄像头会捕获用户的面部图像,然后通过调用Emotion API对人脸进行实时分析。API能够精确地检测出用户当前的情绪状态,并将这种情绪与预设的...

    SchoolWakeUp:学校的起床闹钟,让他们的学生获得尽可能多的睡眠,并按时起床

    《SchoolWakeUp:Java编程实现智能...通过对A/B日制度的支持和每日天气推送,SchoolWakeUp不仅提高了实用性,也体现了对用户需求的深度理解。通过不断迭代和完善,SchoolWakeUp有望成为学校生活中不可或缺的一部分。

    MOLI_SCHEDULE:在Android上安排应用程序

    5. **依赖库**:可能包含第三方库的引用,如Google Play Services(用于推送通知、云同步等功能)或其他Java库,这些库为开发者提供了额外的功能和便利。 6. **构建脚本**:如Gradle脚本,用于编译、打包和部署应用...

    网络游戏-传输数据的方法、终端设备和网络设备.zip

    3. **移动设备**:智能手机和平板电脑利用移动操作系统(如Android和iOS)上的游戏应用商店,提供轻量级到中度复杂度的游戏。 4. **虚拟现实(VR)和增强现实(AR)设备**:如Oculus Rift、HTC Vive和Pokemon Go,...

    Git权威指南PDF完整版

    15.4 合并后推送/ 207 15.5 禁止非快进式推送/ 208 第16章 冲突解决/ 210 16.1 拉回操作中的合并/ 210 16.2 合并一:自动合并/ 212 16.2.1 修改不同的文件/ 212 16.2.2 修改相同文件的不同区域/ 214 16.2.3 同时更改...

Global site tag (gtag.js) - Google Analytics