BluetoothChat同步了Activity的onResume生命周期方法,为什么?

2024-03-05

我现在正在研究蓝牙 Android API,并且遇到了 BluetoothChat 示例。http://developer.android.com/resources/samples/BluetoothChat/index.html http://developer.android.com/resources/samples/BluetoothChat/index.html

它包含许多错误,首先一个简单的事实是它使用 API 11,但清单并不强制使用这个最低 API。

其他有趣的事情是在 Activity 生命周期方法上使用同步关键字,例如 onResume:

    @Override
public synchronized void onResume() {
    super.onResume();
    if(D) Log.e(TAG, "+ ON RESUME +");

    // Performing this check in onResume() covers the case in which BT was
    // not enabled during onStart(), so we were paused to enable it...
    // onResume() will be called when ACTION_REQUEST_ENABLE activity returns.
    if (mChatService != null) {
        // Only if the state is STATE_NONE, do we know that we haven't started already
        if (mChatService.getState() == BluetoothChatService.STATE_NONE) {
          // Start the Bluetooth chat services
          mChatService.start();
        }
    }
}

为什么在那里使用这个关键字?有没有任何合理的解释,或者只是编写代码的人不知道 onResume 将始终由同一线程调用?或者我错过了什么?

先感谢您!


这似乎是一个很老的问题,但我认为可能是这样:

我的猜测是它想要小心“对话框”返回的时间。 BluetoothChat 示例使用对话框(以及类似覆盖对话框的活动)来启用蓝牙、启用发现和启动配对/连接。

我不确定这一点,但我怀疑存在一个错误,其中不同的线程返回到主 Activity 并导致了如何处理的混乱onResume.

他们可能应该做的是synchronize对象上的块并使用标志来确定状态。这样,意图、状态和功能就更加清晰——并且应用程序知道它应该做什么onResume;

也许是这样的:

//class fields    
private Object myLockObj = new Object();
private boolean isPausedForPairing = false;

public void onResume()
{
    super.onResume();

    synchronized (myLockObj)
    {
        if (isPausedForPairing)
        {
            //handle a "pairing" onResume
        }
    }
}

然而,由于它是一个示例应用程序,他们可能决定使用更简单的东西。示例应用程序并不总是遵循约定,因为其想法是演示示例所需的特定代码。有时遵循约定可能会添加大量“分散注意力”的代码。不过,您是否同意这一点取决于您。

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

BluetoothChat同步了Activity的onResume生命周期方法,为什么? 的相关文章

  • 如何使用 python 从气球弹出窗口中读取文本?

    我正在使用蓝牙将大约 500MB 的大文件从一个系统传输到另一个系统 在此期间 我将看到一个气球弹出窗口 显示 蓝牙连接 并显示模式已更改为高速模式的文本 我想使用 python 将此文本获取到变量中 关于如何从气球弹出窗口中读取文本的任何
  • Python 2.7 的蓝牙? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对 Python 2 7 进行蓝牙编程的最佳方法是什么 我尝试使用pybluez https code
  • 如何使用node.js从蓝牙设备接收数据

    我是 javascript 和 node js 的新手 目前从事医疗项目 首先我将解释我的工作 我必须从蓝牙设备接收数据 正常血压率 脉搏率 并使用 node js 在 Web 应用程序中显示读数 我不知道如何从蓝牙设备 病人监护仪 接收数
  • 与 libbluetooth.so 链接

    在 Ubuntu 14 04 上 我尝试做一个蓝牙设备列表的小示例 但在编译这个简约演示时 我遇到了一个关于与蓝牙共享库链接的简单问题http people csail mit edu albert bluez intro c404 htm
  • bluez 同时具有经典和低能耗设备

    Linux下的bluez是否可以同时连接多个经典和低能耗设备 bluez 网站提供这样的信息不是很有帮助 是的 我已经成功同时连接到 7 个低能耗设备 最大值因您使用的硬件而异 您还可以连接到多个经典设备 以下是我用于通过 L2CAP 连接
  • 通过蓝牙读取原始数据

    我有一个数字人机接口设备 我正在尝试使用 32feet net 连接到它 这样我就可以从中读取输入数据并在我的应用程序中处理输出 我以前从未使用蓝牙编程过 并且正在边学习边编程 我可以使用 microsoft broadcom 堆栈将我的设
  • 在 Android 上的活动之间保持蓝牙连接 [重复]

    这个问题在这里已经有答案了 可能的重复 Android 如何将蓝牙连接传递给另一个活动 https stackoverflow com questions 6872970 android how to pass a bluetooth co
  • 32feet.net 如何在 C# 中异步发现附近的蓝牙设备

    我正在尝试使用32英尺 NET http 32feet codeplex comC 应用程序中的蓝牙库用于检测附近的设备 我的小应用程序的目的是通过人们手机的蓝牙功能让电脑知道谁在房间里 执行此类操作的最佳方法是让我想要 跟踪 的设备连接一
  • 通过蓝牙检测附近的另一台 Android 设备

    好吧 我这里有一个有点奇怪的问题 我正在开发一款 Android 游戏 我希望 Android 手机能够检测到彼此的存在 搜索其他玩家的设备将知道其他玩家设备的蓝牙 MAC 地址 来自游戏数据库 但是设备不会配对 并且设备不会处于可发现模式
  • 扫描 iPhone 范围内的蓝牙设备需要多长时间?

    我知道 iPhone 蓝牙功能要到 3 0 才能通过 SDK 访问 但是需要多长时间才能找到该区域的设备 它取决于该区域的设备数量吗 如果范围内有大约 5 个设备 扫描发现所有设备是否需要花费 30 秒的时间 我知道有很多未知因素 但我试图
  • 连接关闭且应用程序终止后,BLE 堆栈反复重新连接到外设

    我有一个应用程序 它打开与 BLE 设备的短暂连接 执行一些特征读取和写入 然后断开并关闭连接 应用程序使用 autoReconnect false 并且设备未配对或绑定 我看到 Android 的一些非常奇怪的行为 它似乎反复且意外地重新
  • 调用 sdp_record_register() 时出现分段错误

    我正在尝试使用 BlueZ 在 SDP 中注册我的蓝牙服务 我跟随this http people csail mit edu albert bluez intro x604 html教程 代码编译成功 但当我运行它时 出现分段错误 即使是
  • 蓝牙连接:MODE_IN_CALL 与 MODE_IN_COMMUNICATION

    我有一个应用程序需要连接到无线蓝牙耳机来收集原始音频 MODE IN CALL 适用于某些设备 MODE IN COMMUNICATION 适用于其他设备 麦克风可以工作 但我失去了音频 反之亦然 我使用的是 Nexus 5x 和 Sams
  • 没有 GameKit 的 iOS 蓝牙

    我已经知道使用 GameKit 我只能连接到运行相同应用程序的其他 iOS 设备 但我想连接到 Parallaz EasyBluetooth 芯片来发送和接收命令 因此我需要不同的解决方案 我想有一些针对越狱设备的库 但我不知道 你能给我一
  • 蓝牙串行插件不适用于 ionic

    我正在尝试将蓝牙集成到我的离子应用程序中 以便它可以从蓝牙设备接收数据 我尝试使用蓝牙插件 但在 PC 和 Android 设备上都出现了一堆错误 我已经使用以下命令安装了蓝牙串行 cordova 插件添加 com megster cord
  • 安卓蓝牙无法连接

    我遇到这个问题已经有一段时间了 但一直无法解决 我有一个 Android 应用程序 它将所有配对的设备放在列表视图中 当您单击列表项之一时 它将发起连接到该蓝牙设备的请求 我可以毫无问题地获取设备列表及其地址 问题是 一旦我尝试连接 我就会
  • 如何检查设备上是否启用了蓝牙

    我想检查设备上是否启用了蓝牙 以便应用程序可以在没有用户交互的情况下使用它 有什么办法可以做到这一点吗 我还可以分别检查蓝牙和蓝牙低功耗吗 我使用以下方法完成了此操作Radio class 检查蓝牙是否已启用 public static a
  • Android 2.1:如何轮询现有蓝牙连接的 RSSI 值?

    我需要知道使用 Android 2 1 手机与远程设备建立蓝牙连接的信号强度 从SDK中 我可以看到我可以在发现远程设备时确定RSSI 但我不知道如何随着时间的推移更新该 RSSI 值 有人可以帮我吗 谢谢 从 SDK 中这是获取 RSSI
  • 如何在 Mac OS X 10.9.5 上以编程方式读取低功耗蓝牙传输的数据?

    我正在尝试阅读蓝牙低功耗 http www bluetooth com Pages low energy tech info aspx使用 Ruby 以编程方式传输数据 低功耗蓝牙技术不支持标准规范 v4 0 中的串行端口配置文件 SPP
  • Java - 同步方法导致程序大幅减慢

    我正在尝试了解线程和同步 我做了这个测试程序 public class Test static List

随机推荐