gpt4 book ai didi

android - 运行哪个后台模型

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:02 25 4
gpt4 key购买 nike

我正在尝试开发一个需要服务的应用程序在后台运行。我对android编程比较陌生,在阅读了许多关于创建的帖子、博客、操作方法和书籍之后和管理服务,我仍然对我使用哪种模型感到困惑应该尝试使用。

首先,让我介绍一下(一般的)申请要求:我需要一个会产生后台进程(服务?)的应用程序它将连接到蓝牙设备。蓝牙设备是旨在将数据传送到 android 设备。问题是数据随时可能进来,所以蓝牙连接必须保持活跃。请注意,该应用程序是一个非常具体的应用程序,并且是不供公众使用。我确实理解不支持的论点一直在运行后台应用程序,但请理解这是针对特定客户的非常特定的应用程序。

现在,一般来说,我认为程序流程是开始应用程序(并启动 UI Activity )。然后我需要配置和连接到蓝牙设备。此时,用户应该能够做其他事情——打电话、查看电子邮件等,当蓝牙连接仍处于 Activity 状态且可能接收数据。如果有数据,则会触发通知等。

下面是我的问题和疑虑:

  1. 如果我启动一个应用程序(它会生成一个 UI Activity 并最终生成我的蓝牙连接服务)但应用程序被杀死,显然,处理蓝牙连接的服务也被终止。怎么能我让它活着?我读到 Service.setForeground() 是depricated,但即使我将它设置为前台,如果应用程序被杀死,服务也被杀死。我需要让它运行尽可能高优先级的背景(同样,我这样做理解这被认为是“错误的形式”,但这是一个特定的应用程序,此功能已由客户请求)。

  2. 如果我启动了应用程序(和服务等),但是用户说,接听电话,应用程序进入后台。然而,假设用户返回主屏幕并启动一个不同的应用程序的实例,即他没有按住主页键来选择已经从任务管理器运行的应用程序,但完全启动新的一个。如果处理蓝牙连接的服务仍然运行时,这个新实例将如何表现?即,我怎样才能得到它连接到已经在第一个运行的蓝牙服务应用程序的实例而不是这个新实例?我必须使用某种形式的远程服务而不是本地服务?这是我有点困惑,因为它似乎是远程服务,定义一个 AIDL 似乎会产生很多额外的开销,并且因为我已经在运行的服务中产生了很多开销一直都是背景,我想让它尽可能小。我如何才能确保连接到已在运行的同一服务?

最佳答案

1)该服务不依赖于 Activity。您可以让它在后台运行,直到您调用 stopSelf()

你可以有一个BroadcastReceiver它会监听 android.intent.action.BOOT_COMPLETED,因此您的服务会在手机开机时启动。

2)您的 Activity 应该绑定(bind)到该服务。并从中获取信息。检查this question .

关于android - 运行哪个后台模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com