Android 应用程序关闭时如何保持 Web 套接字连接处于活动状态

2024-03-23

我正在寻找一个应用程序,向 websocket 发送消息,以便在计算机内的特定参数发生变化时启用通知。参数在计算机中发生变化,通过 websocket 传输,然后到达我的应用程序。这部分是正确的,对吧?

即使我的应用程序关闭,我如何接收这些 websocket 通知?这就是后台数据吧?这应该很简单吗?我的应用程序在关闭时不需要向 Web 套接字发送消息。它所需要做的就是在关闭时接收消息。理想情况下,它会说“告诉我什么时候范围变化!'安装时,然后在安装到设备上时永远保持连接。

此外,网络套接字由第三方托管,因此我无权访问它可能提供的任何服务器设置。

编辑:我觉得我在这一切中错过了一个重要的概念。消息系统在关闭时如何接收推送通知?通过网络套接字,对吗?那么即使消息应用程序关闭,它也会收到数据吗?


过去几周我一直在研究类似的问题。这就是我所做的:

  1. 我正在使用 AutoBahn Android 来实现 WebSocket。我怀疑任何其他实现中的工作原理都应该有点相似。
  2. There are basically 3 calls to implement the websocket handler:
    1. onOpen()
    2. onReceiveMessage()
    3. 关闭()
  3. And 3 calls that you use in a websocket connection:
    1. 连接()
    2. 断开()
    3. 发信息()
  4. 现在这就是棘手的地方!您必须保持连接有效。我想到的第一个解决方案是显而易见的Service. But a Service它本身并不是一个很好的方法,因为它将在应用程序的 UI 线程上工作。大多数时候,它会做它的事情,不会打扰你或对你造成任何伤害。然而,当你确实必须打开应用程序的用户界面时(我有一个界面,它对我很重要),它会给你带来无尽的委屈!无论如何,我似乎无法以非常完美的方式实现它(我的意思是我曾经多次失去连接)。
  5. 所以我扩展了一个 AsyncTask 并在doInBackground()方法我调用了一个函数mWSConnectionStart()它基本上要求 WebSocketConnection 连接并执行其操作。与此同时,我postUpdate()从 AsyncTask 以防我需要构建一个Notification.

这对我来说效果很好,我希望这个方法也适合你。

PS:我一直无法解决的一个问题是CPU利用率高。愿你过得更好!

PSS:更新:我刚刚看到在我的设备上,Whatsapp(我一直在对我的应用程序性能进行基准测试)比我的应用程序具有更高的 CPU 利用率(电池)!也许它与 WebSockets 有关。

编辑:我真的建议使用 GCM 而不是 WebSocketConnections。我们正计划自己向 GCM 迈进。原因是它不需要太多的服务器端维护,而且它可以自动执行我们的许多任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 应用程序关闭时如何保持 Web 套接字连接处于活动状态 的相关文章

  • 获取 NullPointerException:尝试从字段“int android.view.View.mViewFlags”读取 - Android 动画

    我已经实现了一个动画 其中我在回收器视图中有图像视图 单击该项目时我想在回收器视图之外的图像视图上做一些动画 这样 我创建了一个新的图像视图 将其添加到主容器中 做了动画 最后我将它从主容器中取出 以下是回收器视图的点击项的代码 Code
  • 在 Android 10/Q 上运行的 Android ACTIVITY_RECOGNITION 权限 SDK 28 (SDK 29)

    我的 Android 应用程序以 SDK 28 为目标 并连接到 Google Fit 以上传数据并读取其他一些数据 该应用程序使用 HistoryAPI 读取 com google step count delta 数据 本文档声称 如果
  • 有没有办法隐藏 TextView 中的文本?

    有没有办法隐藏 TextView 中的部分 但不是全部 文本 我尝试使用 AbsoluteSizeSpan 将大小设置为 0 但这没有任何我看到的视觉效果 你可以将大小设置为 1 但实际上你会得到凹凸不平的线条 而不是可读的文本 很可爱 但
  • Fused Location Provider 是不错的选择吗?

    我正在开发一个应用程序 我想在其中使用融合位置提供程序 但我有一些疑问 还有几个问题 当 GPS 关闭并且我将优先级设置为 HIGH 时 是否意味着 GPS 会自动打开 我可以根据需要将 UpdateLocation 设置为具有高优先级的
  • Moshi 无法解析 nullable

    你好 希望你能帮助我 使用 kotlin Retrofit2 moshi 我从 https api spacexdata com v3 launches 获取数据并解析它 一切都很顺利 我得到的属性如下 flight number miss
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 如何在android中使用retrofit访问404错误?

    我正在使用改造 2 访问 REST API 以使用原始正文插入 JSON 数据 我从服务器获得成功响应 但在响应时收到 404 错误 我想访问404错误请帮我解决这个问题 ApiUtil getServiceClass sendFinalC
  • WebView 与 Chrome 自定义选项卡

    我正在构建一个应用程序 在详细活动中我必须显示一个网页 我本来打算使用 WebView 但后来我看到了 Chrome Custom Tab 你们认为最好实施什么 为什么 如果您只想显示某个页面 那么我建议您使用 chrome 自定义选项卡
  • 带有 ListTiles 和按钮行的 Flutter 下拉菜单

    我正在尝试构建一个自定义下拉菜单 如下所示 我已经成功地实现了ListTiles and Row of Buttons没有下拉菜单 但我不确定如何将所有内容嵌套在下拉菜单类中 这是我到目前为止所得到的 class HomePage exte
  • Android Studio:如果设置项目的背景颜色,ListView OnClick 动画将不起作用

    在我的项目中 我在 ListView 内设置了项目 由插入 ConstraintLayout 中的多个元素组成 的背景颜色 但如果背景颜色不是至少一点透明 则单击和长按的默认动画会消失 事实上 随着透明度的降低 点击元素的效果越来越不明显
  • 为什么抽屉布局中的视图强制缩放以填充屏幕

    这是我的测试代码
  • 实施材质主题时遇到问题

    我在用this http antonioleiva com material design everywhere 作为在 Android 5 0 之前的设备上向现有应用程序实施 Material 主题的教程 我的问题是我得到了Null Po
  • Java 套接字 - 读和写

    问题 客户端没有收到任何消息 这是客户端和服务器的完整代码 CLIENT public class Client extends Socket public Client String hostName int port throws Un
  • Android 中表与游标的并集

    我正在尝试将两个具有相同字段的表合并起来 通过内容提供程序 创建一个用于创建 ListView 的游标 Override public Cursor query Uri uri String projection String select
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 长按 HOME 按钮菜单隐藏 Android 应用程序

    我想从 且仅从 完成后长时间按住 HOME 按钮时出现的菜单中隐藏我的 Android 应用程序 有没有办法做到这一点 以编程方式调用 finish 并不能解决问题 有很多关于从启动器和任务管理器隐藏应用程序的线程 但这不是我想要的 我只是
  • SQLiteConstraintException:错误代码19:约束失败——Android错误

    我已经看到了一些与此相关的其他问题 但没有一个答案似乎真正适用于我的代码 当我尝试插入数据库时 出现 SQLiteConstraintException 错误代码 19 约束失败 错误 这是插入操作的代码 db insert 现在返回 1
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • Android 处理 ListView 中的多个 EditText 字段

    只是一个基本问题 如果我有几十个 EditText 字段是 ListAdapter 的一部分 那么各个 EditText 字段如何知道它们属于哪一行 目前我正在使用 TextWatcher 来监听文本输入 我尝试扩展 TextWatcher
  • 如何调试仅在发布模式下崩溃的 Android 应用程序

    在调试模式下一切正常 但在发布模式下崩溃 调试模式下有哪些所需权限在发布模式下未打开 EDIT 当我将 链接 设置为 无 时 我会通过第一个屏幕进入 登录 屏幕 但是 当我添加发布权限时Internet 第一次尝试读取远程实体框架核心表时它

随机推荐

  • 禁用 Alamofire iOS 缓存

    我试图在使用 Alamofire 发出 iOS 请求时禁用缓存 当我尝试向服务器发出请求 然后以其他用户身份进行身份验证时发出请求时 我会收到 304 状态代码 我已经尝试过一切这个链接 https stackoverflow com qu
  • 具有 HTML 支持的 Angular Material 工具提示

    我只是想知道有没有好的第三方angular material tool tip plugin在 的支持下HTML 我在用Material design with Angular 7仅 无引导程序 虽然我正在使用ng2 工具提示指令 http
  • 函数超时(Windows)?

    我正在尝试为特定功能实现超时 我检查了SE中的许多问题 但找不到任何适合我的问题的解决方案 因为 我在 Windows 中运行 python 超时应用于我无法控制的Python函数 即它是在已经设计的模块中定义的 python函数不是子进程
  • 如何通过 ID 检查 Scratch 项目是否被共享?

    我不希望很多人知道这一点 但是有没有办法检查 Scratch 项目 ID 是否属于共享项目 例如 项目 ID3是一个实际项目 但不共享 而 ID399293697是共享的 那么我如何使用 JavaScript 来查看这些是否共享呢 我搜索了
  • “RVM 不是函数”错误

    RVM 已正确安装在我的计算机上 运行 Mac OSX 10 6 8 并且运行良好 奇怪的是 要运行它 我必须使用source rvm scripts rvm对于每个新会话 我尝试从它创建一个符号链接 opt local bin rvm 但
  • 如何删除 poi 3.8 中的超链接?

    我在读取包含 poi 中超链接文本的 Excel 文件时遇到一些问题 数据是这样的 excel文件 1 type category job type position name email 2 测试 开发商 兼职 经理 洪 asdf dsa
  • 广播接收器中的 Android AlarmManager

    我有广播接收器 该广播接收器应安排警报 通常我会这样做 AlarmManager am AlarmManager getSystemService ALARM SERVICE am set AlarmManager RTC time myP
  • 如何保持 Mercurial 存储库较小?

    我的中央存储库存储在 8GB USB 记忆棒上 我不小心提交了一些大文件 因此存储库不再适合放在内存条上 有办法纠正这种情况吗 我投票赞成了吸引人的答案 因为他有你可能会使用的步骤 但这里有一个方便的列表 不过 首先要提醒一下 如果您已经将
  • 使用 Boost::spirit 编写的解析器存在性能问题

    我想解析一个如下所示的文件 类似 FASTA 的文本格式 gt InfoHeader Some text sequence that has a line break after every 80 characters gt InfoHea
  • Facebook og:图像未以全尺寸显示

    从 ElfYourself com 共享视频时 发送到 Facebook 的 OG 图像为 130x130 像素 Facebook 表示 这是它将在新闻提要 时间轴中显示的最大尺寸 然而 Facebook 在图像提要中实际显示的是 90x9
  • 我们可以在 sails 中的 Create() 回调之后/之前更改属性值吗?

    我有一个场景 我必须用模型的 id 填充模型的属性 对于例如 在用户模型中 module exports attributes activation link string afterCreate function value cb val
  • java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory [重复]

    这个问题在这里已经有答案了 我已关注本教程 http www tutorialspoint com servlets servlets file uploading htm用于使用 servlet 进行文件上传 这是文件夹结构 使用 Ecl
  • 无法获取默认调试密钥库位置

    我在 Android Studio 设置中更改了项目默认位置 Documents Android Studio projects to Documents AndroidProjects 然后我在文件资源管理器中将现有项目从前者移动到后者
  • Play框架:继承按类型排序

    在我的应用程序中 我有两个课程 Group Model 和一个基类Element 我使用单表策略来持久化这些模型 strategy InheritanceType SINGLE TABLE 因此一列dtype在我的表中创建 我现在尝试根据此
  • 修复了使用 FlatList 进行原生反应的页脚

    下列的这个问题 https stackoverflow com questions 29447715 react native fixed footer在带有 ScrollView 的固定页脚上 我试图在屏幕上实现固定页脚FlatList
  • jquery防止窗口滚动

    我正在 jquery 中开发一个选择菜单替换 首先 我必须通过添加来使新的选择菜单可聚焦tabindex 0 到容器 然后 我禁用原始选择菜单的焦点并将焦点放在新菜单上 当新的焦点被聚焦并按下向上和向下箭头时 选项会相应改变 但有一个大问题
  • 在Python中从pdf中提取印地语编写的文本[重复]

    这个问题在这里已经有答案了 我想从 pdf 文档中提取印地文输入的文本 我已附上示例页面的图像 https i stack imgur com UkT86 jpg我正在处理 我尝试使用 pdfminer 从中获取文本 但文本是乱码 可能是由
  • 悬停时的 jQuery 卡片动画

    当鼠标悬停在其中一张卡片上时 其余卡片应正确地逐一减小大小 例如 将鼠标悬停在卡片 1 上 目前我的解决方案是一一添加和删除类 但我想知道是否有更好的方法使用 jQuery 来完成它 card mouseover function card
  • 超出低磁盘水位线 [??%]

    我在我的开发机器 一台笔记本 中使用 Elasticsearch 1 4 4 一切都设置为默认值 因为我从未更改过任何设置 当我启动它时 我通常会收到以下消息 2015 10 27 09 38 31 588 INFO node Milan
  • Android 应用程序关闭时如何保持 Web 套接字连接处于活动状态

    我正在寻找一个应用程序 向 websocket 发送消息 以便在计算机内的特定参数发生变化时启用通知 参数在计算机中发生变化 通过 websocket 传输 然后到达我的应用程序 这部分是正确的 对吧 即使我的应用程序关闭 我如何接收这些