在开发过程中,我们经常会用到TCP/IP连接实现即时数据传输,对于java Server 来说如果用在PC段问题不会太大,在PC上资源空间相对比较大,呆在手机上不一样,要考虑很多问题,下面我说说在手机客户端实现TCP/IP连接中,我们讨论下一下几个问题:

第一,耗电

关于耗掉问题,我想很多朋友开发中也遇到过,其实在android中耗电主要是因为占用cpu时间长和一些感应器的使用,java中药实现长连接基本上都要实现两个线程一个接收一个发送数据,分分秒秒都在跑着两个线程对于手机来说能不耗电吗?当然。那我们要怎样解决呢,我这里给出几个建议,在android中,发消息线程我们可以用一个线程池,有消息发时跑一下相对没那么耗cpu这样不会一直占用cpu了,但是对于接收消息怎么解决呢,对于即时消息来说你不能让他等待一会再跑一下看看有没有消息吧,这样给用户体验很不好,一直轮询的跑看看又没消息有很耗电给人感觉这软件怎么那么流氓不知道在搞什么那么耗电,这样可能就不想用了。那怎么办?这里我给一个建议就是可以使用C/C++自己去封装一个TCP/IP长连接的库,这个库我们可以简单得实现连接,断开,还有发消息(发送线程可以不在这里处理),接收消息(接收线程在这里处理),在C/C++中可以Socket使用阻塞模式接收消息(即,有消息就接收没消息就自动等等在哪里),这样消息也能即时接收,耗电量也相对少很多,这个接收线程可以做得相对简单点,只接收数据,然后直接回调给上层处理就可以。

第二,内存

手机中内存使用也是很致命,虽然现在的手机内存已经不小了,但是他不是只供应你一个应用使用,所以还得处理耗没有个空间,比如我们发送消息时会有很多数据包,发出去了也就不处理了。这样很多对象就没有得到及时得回收。我建议我们把发送完后的包以及接收到的包处理完后我们顺便把他置空,这样回收就会相对及时一些。

第三,保持长连接

长连接很多朋友都知道使用,定时发送心跳包来维持,但是如果直接启用一个线程来去触发发送又是一个大隐患(耗电),在android 中我们可以使用定时广播机制实现,我们可以设定广播时间然后再广播接收器中发送心跳包,这个心跳包我们可以直接发送不适用线程,对于发送心跳来说比较频繁,使用线程还是会耗电,第二,我们心跳其实不需要一天到晚得发送,我们可以在用户使用完或者锁屏后25分钟就暂停发送,然后再过25分钟唤醒连接看看有没有消息有就接收,没有继续断开,如果用户打开应用到停止使用有等待25分钟断开然后再连接查看离线消息,这一个循环又能保证新消息的接收又不会一直占用CPU。

android tcp tcp阻塞 线程不运行,Android tcp优化相关推荐

  1. amd运行android studio,彻底解决AMD 无法运行android studio原生模拟器

    彻底解决AMD 无法运行android studio原生模拟器 文章目录 彻底解决AMD 无法运行android studio原生模拟器 步骤 零:本机配置 步骤 一 : 开启bios虚拟化.关闭wi ...

  2. 树莓派编译 android,RPI3: 在树莓派3上运行ANDROID 8.1系统

    Android 官方并没有提供可运行在树莓派3上的Android系统,而只提供了AndroidThings系统,并且还只是preview的版本.想在树莓派上运行Android 8.1系统,就需要自己动 ...

  3. atom为什么可以运行android,Intel:22nm Atom可运行Android操作系统

    Intel今天公开表示,开发代号Valleyview的下一代22nm Atom SoC芯片(平台代号Bay Trail)已经可以运行Windows.Android操作系统,能够实现8毫米厚设备全天工作 ...

  4. android中如何实现蓝牙后台运行,Android实现的简单蓝牙程序示例

    本文实例讲述了Android实现的简单蓝牙程序.分享给大家供大家参考,具体如下: 我将在这篇文章中介绍了的Android蓝牙程序.这个程序就是将实现把手机变做电脑PPT播放的遥控器:用音量加和音量减键 ...

  5. 集显怎么安装android模拟器,集成显卡是不是不能运行Android L模拟器?

    输入框放不完,只能起下一页了... 07-09 05:41:42.024: I/DEBUG(939):     #06 pc 000008a1  /system/bin/surfaceflinger ...

  6. android 判断activity是否在运行,Android 判断某个Activity 是否在前台运行的实例

    如下所示: /** * 判断某个界面是否在前台 * * @param context Context * @param className 界面的类名 * @return 是否在前台显示 */ pub ...

  7. 关于 Windows Subsystem for Android 以及 Windows 11 运行 Android 应用的更多细节

    更新:Beta 分支已经支持在 Windows 11 上使用 Android 应用了,具体的使用和安装方法参考这篇文章 Windows 11 Beta 预览版用户已经可以体验 Android 应用 即 ...

  8. java 动态代理 阿bin_Android WebView 的方法只能在 UI 线程中运行

    Android WebView 的方法只能在 UI 线程中运行 Android,WebView,线程 2018.04.25 根据报错信息,Android 的 WebView 所有的方法都只能在 UI ...

  9. android 表格控件点击事件,Android零基础入门|RecyclerView点击事件处理

    原标题:Android零基础入门|RecyclerView点击事件处理 前面两期学习了RecyclerView的简单使用,并为其item添加了分割线.在实际运用中,无论是List还是Grid效果,基本 ...

最新文章

  1. Java线程详解(16)-条件变量
  2. dataGridView使用指南系列一、回车换行或换列完美解决方案
  3. zoj2271 Chance to Encounter a Girl(DP)
  4. it's so cold
  5. #if/#else/#endif
  6. c语言stanf,stanf
  7. C#操作Cookie
  8. textarea 字体限制,超出部分不显示并及时显示还剩字体个数
  9. python subplots_python fig,ax = plt.subplots()
  10. 【转】HDC,CDC,CWindowDC,CClientDC,CPaintDC等等
  11. XmlAttribute与实体的转换和匹配方案(附源码)
  12. Intellij IDEA 12 详细开发教程(三)忽略编译错误设置和快捷键
  13. IText PDF签章时,如何获取PDF页的坐标
  14. JSP无法加载静态资源:Failed to load resource: the server responded with a status of 404 ()
  15. GIS应用技巧之矢量网络分析法
  16. 美国心脏协会:六种心血管疾病的症状区别
  17. 【笔记】笔记本查看电池损耗,一句命令搞定!(附笔记本电池使用技巧)
  18. AHRS、IMU和INS对比
  19. 四方、曾经魂牵梦萦的地方
  20. jsp+servlet+mysql实现的学生签到考勤请假管理系统源码+教程

热门文章

  1. linux系统python 2.6 安装pip_详解CentOS升级Python2.6到Python2.7并安装pip
  2. linux / 命令行 / LD_DEBUG 命令
  3. 使用ESP32能驱动电子墨水屏吗?
  4. ipad显示ping连接服务器失败,ipad突然连不上网如何修复
  5. linux终端登录软件,小白入门之四:使用终端登录软件,登录linux系统
  6. java webservice 作用_@WebService这个标签的作用是什么
  7. 3d建模电脑配置要求_学习3D建模需要什么软件,电脑配置应该如何?新手自学会遇到的问题...
  8. Spring MVC + Thymeleaf
  9. 解方程 2014NOIP提高组 (数学)
  10. [51nod1079]中国剩余定理