ios调用高德地图定位报错

news/2024/10/5 16:31:51/

错误信息如下:

Thread Performance Checker: Thread running at User-interactive quality-of-service class waiting on a lower QoS thread running at Default quality-of-service class. Investigate ways to avoid priority inversions

PID: 1668, TID: 15380

Backtrace

=================================================================

3   Foundation                          0x0000000113be3985 -[_NSThreadPerformInfo wait] + 64

4   Foundation                          0x0000000113be5da5 -[NSObject(NSThreadPerformAdditions) performSelector:onThread:withObject:waitUntilDone:modes:] + 907

5   yydj                                0x0000000100fa1e89 -[AMapLocationManager startUpdatingLocation] + 98

6   yydj                                0x0000000100f15a68 $s4yydj14ViewControllerC8locationyyF + 408

7   yydj                                0x0000000100f1557b $s4yydj14ViewControllerC11viewDidLoadyyF + 1675

8   yydj                                0x0000000100f158bc $s4yydj14ViewControllerC11viewDidLoadyyFTo + 28

9   UIKitCore                           0x000000012a7bafee -[UIViewController _sendViewDidLoadWithAppearanceProxyObjectTaggingEnabled] + 80

10  UIKitCore                           0x000000012a7c10e6 -[UIViewController loadViewIfRequired] + 1342

11  UIKitCore                           0x000000012a6dcb2b -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 159

12  UIKitCore                           0x000000012a6dce5f -[UINavigationController _startTransition:fromViewController:toViewController:] + 210

13  UIKitCore                           0x000000012a6de035 -[UINavigationController _startDeferredTransitionIfNeeded:] + 856

14  UIKitCore                           0x000000012a6df495 -[UINavigationController __viewWillLayoutSubviews] + 136

15  UIKitCore                           0x000000012a6bbde2 -[UILayoutContainerView layoutSubviews] + 207

16  UIKit                               0x0000000150bf9c73 -[UILayoutContainerViewAccessibility layoutSubviews] + 51

17  UIKitCore                           0x000000012b88af3c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2138

18  QuartzCore                          0x000000010e313775 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 527

19  QuartzCore                          0x000000010e31f5a1 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 67

20  QuartzCore                          0x000000010e23ecf4 _ZN2CA7Context18commit_transactionEPNS_11TransactionEdPd + 706

21  QuartzCore                          0x000000010e27982a _ZN2CA11Transaction6commitEv + 728

22  UIKitCore                           0x000000012b1c9d8f __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 34

23  CoreFoundation                      0x000000010f4f5dea __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12

24  CoreFoundation                      0x000000010f4f559d __CFRunLoopDoBlocks + 391

25  CoreFoundation                      0x000000010f4efe7c __CFRunLoopRun + 940

26  CoreFoundation                      0x000000010f4ef6ed CFRunLoopRunSpecific + 557

27  GraphicsServices                    0x000000011c76f08f GSEventRunModal + 137

28  UIKitCore                           0x000000012b1aa6ee -[UIApplication _run] + 972

29  UIKitCore                           0x000000012b1af16e UIApplicationMain + 123

30  UIKitCore                           0x000000012a22ab73 __swift_destroy_boxed_opaque_existential_1Tm + 10307

31  yydj                                0x0000000100f20f5b $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 123

32  yydj                                0x0000000100f20ed7 $s4yydj11AppDelegateC5$mainyyFZ + 39

33  yydj                                0x0000000100f21008 main + 24

Message from debugger: killed

回答:

这个错误信息表明你的应用在执行用户交互质量的服务时,阻塞在了一个较低优先级的线程上,这导致了优先级倒置。特别是,你的应用在调用`AMapLocationManager`的`startUpdatingLocation`时发生了这个问题。这可能会导致应用性能问题。以下是一些可能的解决方法:

### 1. 在后台线程中启动位置更新

`AMapLocationManager`的`startUpdatingLocation`可能是一个耗时操作,应该在后台线程中运行,而不是在主线程中。你可以使用`DispatchQueue`来处理:

```swift
DispatchQueue.global(qos: .background).async {
    self.locationManager.startUpdatingLocation()
}
```

### 2. 确保UI更新在主线程中进行

所有的UI更新都应该在主线程中进行。确保你所有涉及UI更新的代码都在主线程中运行:

```swift
DispatchQueue.main.async {
    // 更新UI
}
```

### 3. 优化`viewDidLoad`方法

确保`viewDidLoad`方法中没有长时间运行的任务。如果有,将这些任务移到后台线程中执行:

```swift
override func viewDidLoad() {
    super.viewDidLoad()
    
    DispatchQueue.global(qos: .background).async {
        self.locationManager.startUpdatingLocation()
    }
    
    // 其他初始化代码
}
```

### 4. 检查线程优先级

确保线程优先级设置正确。可以使用`qos`(质量服务类)来设置线程优先级:

```swift
DispatchQueue.global(qos: .userInitiated).async {
    // 用户交互相关的任务
}

DispatchQueue.global(qos: .background).async {
    // 后台任务
}
```

### 5. 避免死锁

确保你没有在主线程中执行可能会导致死锁的操作,例如同步调用`DispatchQueue`,特别是在涉及到UI更新和网络请求时。

### 6. 其他性能优化

- 优化`viewDidLoad`方法,确保只做必要的初始化工作。
- 使用`Instruments`工具分析性能瓶颈,特别是线程的优先级和阻塞情况。
- 评估是否有不必要的阻塞调用,重构代码以避免长时间占用主线程。

### 代码示例

```swift
import UIKit
import AMapLocationKit

class ViewController: UIViewController {
    var locationManager: AMapLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 初始化位置管理器
        locationManager = AMapLocationManager()
        
        // 在后台线程中启动位置更新
        DispatchQueue.global(qos: .background).async {
            self.locationManager.startUpdatingLocation()
        }
        
        // 其他初始化代码
    }
}
```


http://www.ppmy.cn/news/1473980.html

相关文章

qt 关于大端小端的一个实验 简单实验

1.概要 起因我用滚动是x86电脑,我用一个usort a11a ,我期待转换长的char字符应该是这样的“1aa1”,因为x86是小端的,这也是这个16位 类型的实际内存顺序,但是输出的结果是 “a11a”,难道这环境不是小端?难道qt能智能…

项目收获总结--MyBatis的知识收获

一、概述 最近几天公司项目开发上线完成,做个收获总结吧~ 今天记录MyBatis的收获和提升。 二、获取自动生成的(主)键值 insert 方法总是返回一个 int 值 ,这个值代表的是插入的行数。若表的主键id采用自增长策略,自动生成的键值在 insert…

怎么样才能为公司申请OV证书?

OV证书,全称为组织验证型SSL证书(Organization Validation SSL Certificate),是一种高级别的SSL/TLS证书,用于加密网站通信并验证网站所属组织的合法身份。相比于基本的域名验证型证书(DV证书)&…

SQL跨数据库服务器查询和跨表批量插入的操作

MSSQL实现跨服务器查询数据库 EXEC sp_addlinkedserver server192.168.1.10, --链接服务器别名 srvproduct, providerSQLOLEDB, datasrc192.168.1.10 --要访问的的数据库所在的服务器的ip GO EXEC sp_addlinkedsrvlogin 192.168.1.10, --链接服务器别名…

【论文阅读】XuanYuan: An AI-Native Database

XuanYuan: An AI-Native Database 这篇文章主要是讨论了AI4DB 和 DB4AI 集成的数据库架构,以此提出了AI原生的数据库,架构如下: 而具体发展阶段来说,AI原生数据库主要由五个阶段组成 第一阶段,AI建议型数据库&#xf…

个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)

目录 一、效果展示 二、项目概述 三、手把手快速搭建实现本项目 3.1 前端实现 3.2 后端方向 五、后续开发计划 一、效果展示 默认展示 一般对话展示: 代码对话展示: 二、项目概述 本项目是一个基于Web的智能对话服务平台,通过后端与第…

Python 3.x 下的 3D 游戏引擎

在 Python 3.x 中,有几个比较流行的用于开发 3D 游戏的引擎和库。虽然 Python 自身不是一个主流的游戏开发语言,但是可以通过这些库和引擎结合其它语言或者底层渲染引擎来实现复杂的游戏开发。 1、问题背景 在 Linux 系统中,尤其是 Debian 7…

探索企业信用巅峰:3A企业认证的魅力与价值

在现代商业环境中,企业的信用和信誉是其发展的核心要素之一。3A企业认证作为信用评级的最高等级,正在吸引越来越多企业的关注。究竟什么是3A企业认证?它为什么对企业如此重要?本文将深入探讨3A企业认证的独特魅力和巨大价值。 3A企…