当前位置: 首页 > news >正文

android 导航app 稳定性问题总结

一 重写全局异常处理:
1 是过滤掉一些已知的无法处理的
问题,比如TimeoutException 这种无法根除只能缓解的问题可以直接catch掉
2 是 一些无法继续的问题可以直接杀死重启,一些影响不是很大的,可以局部还原

比如:

public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {private static final String TAG = "MyUncaughtExceptionHandler";@Overridepublic void uncaughtException(Thread thread, Throwable ex) {ex.printStackTrace();if (null != thread) {LogUtils.e("killProcess thread name is " + thread.getName());}LogUtils.e(ex);Log.e(TAG, "MyUncaughtExceptionHandler_Exception: " + Log.getStackTraceString(ex));if (null != thread && "FinalizerWatchdogDaemon".equalsIgnoreCase(thread.getName()) && ex instanceof TimeoutException) {//https://segmentfault.com/a/1190000019373275 LogUtils.e("FinalizerWatchdogDaemon TimeoutException");} else {LogUtils.e("MyUncaughtExceptionHandler ", "Crash: " + ex.getMessage());//Process.killProcess(Process.myPid()); todo}}
}

二 使用工具代码扫描:比如sonar,lint,有新功能的时候可以跑一跑,大部分提示都不需要关注。
   但是可以自定义一些规则(基于本项目容易出错的规则可以配置下,比如序列化里面是否都支持序列化,是否有new thread的现象)

三 增加监控指标,内存在一些页面下合理范围是多少,线程数的合理范围是多少   
   查看内存:adb shell dumpsys meminfo xxx(包名)
   查看线程数:adb shell cat /proc/pid(进程号)/status
   这两个指标多了,会影响到内存,内存太大就会导致app不稳定。
    (我曾在自己的项目上跑monkey的时候,跑了个脚本监控,感觉还是之前的单例太多了,当时适当减少了一些单例的生命周期)

四 代码质量相关总结
       我这里主要分几个部分进行问题总结:
    1 内存优化及泄露 2 anr,native相关问题总结 3 app启动问题,冻屏,黑屏总结 4 日常高频问题总结
    一分类就很多,整完这些就要处理 android相关问题总结,java相关问题总结部分,尽量分开来,别混在一起。
    主要以自己以往处理的问题做总结。但感觉这样分类有点不好。因为回忆及查阅自己的资料时候,发现既有也有,怕是遗漏,无法分类的很多哦。
    哪有那么多时间 反复查看。头疼

  网上能搜到的,就不要写了,加个关键字,链接啥的就过了。

接下来看下泄露吧,搞得最多的就是泄露了。

一般的泄露,可以直接通过分析hprof文件直接找到,这里就不再写,写下特殊情况下的

找不到明显泄露的,可以直接按照包名分类,查看下对应目录下的对象数量,按大小排序

一个个过滤,会发现一些对象不应该是多个的,或一个页面只应该对应两个的,里面却出现了三个,那一般看下引用堆栈,往往能够发现内存异常,或回收慢的问题

如果代码比较熟悉,可以直接搜相关的对象名字,看下对象数量,一般可以快速定位泄露问题或

回收慢的问题。

这是个笨方法,但对那些出现一次或难复现的问题也是一种方式,比如我会保存一些对象的名字

routeoption,pathinfo,poiforrequest,VariantPathWrap,DrivePathAccessor,

等这些对象经常容易出问题。

有些对象有个特点,当前流程有用,且流程分散,释放了就出问题,留着下次再来的时候容易忘记释放之前的,一般我会下次来赋值之前,将老的释放掉,再赋值给它新的。

有些和业务流程相关的,比如绘制,看不到对象,直接放native了,只能代码里监控,不能超过500个,要及时监控,及时释放(clearitems)。

相关文章:

android 导航app 稳定性问题总结

一 重写全局异常处理: 1 是过滤掉一些已知的无法处理的 问题,比如TimeoutException 这种无法根除只能缓解的问题可以直接catch掉 2 是 一些无法继续的问题可以直接杀死重启,一些影响不是很大的,可以局部还原 比如: p…...

第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式

第11次修改了可删除可持久保存的前端html备忘录&#xff1a;将样式分离&#xff0c;可以自由秒添加秒删除样式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…...

hcip高级网络知识

一&#xff1a;计算机间信息传递原理 抽象语言----编码 编码---二进制 二进制---转换为电流&#xff08;数字信号&#xff09; 处理和传递数字信号 二&#xff1a;OSI--七层参考模型 ISO--1979 规定计算机系统互联的组织&#xff1a; OSI/RM ---- 开放式系统互联参考模型 --- 1…...

常用电子器件学习——MOS管

MOS管介绍 MOS&#xff0c;是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管&#xff0c;简称金氧半场效晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET&#xff09;。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…...

System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

目录 背景: 过程: SQL Express的认识: 背景: 正在运行程序的时候&#xff0c;我遇到一个错误提示&#xff0c;错误信息如下&#xff0c;当我将错误信息仔细阅读了一番&#xff0c;信息提示的很明显&#xff0c;错误出现的来源就是连接数据库代码这块string connStr "s…...

数据库(SQL语句:DMLDQL)

目录 有关数据表的DML操作 1.1 INSERT 语句 1.2 REPLACE 语句 replace语句的语法格式&#xff08;三种&#xff09; REPLACE 语句 和 INSERT 语句的区别 1.3 DELETE 语句 | | TRUNCATE 语句 DELETE TRUNCATE DROP 1.4 UPDATE 数据 1.5 SELECT 语句 &#xff08;DQL数…...

AnimatedDrawings:让绘图动起来

老样子&#xff0c;先上图片和官网。这个项目是让绘制的动画图片动起来&#xff0c;还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹&#xff0c;启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…...

红黑树浅浅学习

红黑树浅浅学习 红黑树概念红黑树平衡性调整 红黑树概念 二叉树&#xff1a;二叉树是每个节点最多有两个子树的树结构。二叉查找树&#xff1a;又称“二叉搜索树”&#xff0c;左孩子比父节点小&#xff0c;右孩子比父节点大&#xff0c;还有一个特性就是”中序遍历“可以让结…...

QGraphicsView 如何让图形大小适配窗口

1. setSceneRect 做什么用&#xff1f; setSceneRect是一个Qt中的函数&#xff0c;用于设置QGraphicsView中的场景矩形&#xff08;QRectF&#xff09;。 QGraphicsView是一个用于显示和编辑图形场景的控件&#xff0c;而setSceneRect函数用于设置场景矩形&#xff0c;即指定…...

sqlmap使用教程(3)-探测注入漏洞

1、探测GET参数 以下为探测DVWA靶场low级别的sql注入&#xff0c;以下提交方式为GET&#xff0c;问号&#xff08;?&#xff09;将分隔URL和传输的数据&#xff0c;而参数之间以&相连。--auth-credadmin:password --auth-typebasic &#xff08;DVWA靶场需要登录&#xf…...

期待已久!阿里云容器服务 ACK AI 助手正式上线

作者&#xff1a;行疾 大模型技术的蓬勃发展持续引领 AI 出圈潮流&#xff0c;各行各业都在尝试采用 AI 工具实现智能增效。 2023 年云栖大会上&#xff0c;阿里云容器服务团队正式发布 ACK AI 助手&#xff0c;带来大模型增强智能诊断&#xff0c;帮助企业和开发者降低 K8s …...

[BUG] Authentication Error

前言 给服务器安装了一个todesk&#xff0c;但是远程一直就是&#xff0c;点击用户&#xff0c;进入输入密码界面&#xff0c;还没等输入就自动返回了 解决 服务器是无桌面版本&#xff0c;或者桌面程序死掉了&#xff0c;重新安装就好 sudo apt install xorg sudo apt inst…...

23种设计模式概述

学习设计模式对我们有什么帮助&#xff1f; 1.提高代码质量和可维护性&#xff1a;设计模式是经过验证的解决方案&#xff0c;有助于解决常见的设计问题。使用设计模式可以减少代码冗余&#xff0c;增强代码的可读性和可维护性&#xff0c;并提高代码的可靠性。 2.提升开发效率…...

英文阅读-LinkedIn‘s Tips for Highly Effective Code Review

LinkedIn的CR技巧 LinkedIn团队CodeReview经验与方法&#xff0c;原文来自https://thenewstack.io/linkedin-code-review/ 总结 Do I Understand the “Why”? 在提交pr的同时需要描述本次修改的“动机”&#xff0c;有助于提高代码文档质量。 Am I Giving Positive Feedbac…...

性能优化-高通的Hexagon DSP和NPU

原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU&#xff0c;这些为处理简单大量运算而设计的硬件。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xf…...

第137期 Oracle的数据生命周期管理(20240123)

数据库管理137期 2024-01-23 第137期 Oracle的数据生命周期管理&#xff08;20240123&#xff09;1 ILM2 Heat Map3 ADO4 优点5 对比总结 第137期 Oracle的数据生命周期管理&#xff08;20240123&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Orac…...

电脑的GPU太强了,pytorch版本跟不上,将cuda驱动进行降级

我的情况&#xff1a; 我买的电脑的GPU版本为rtx4060&#xff0c;但是装上相应的驱动后&#xff0c;cuda的版本为12.3&#xff0c;而现在pytorch中cuda安装命令的最新版本为12.1&#xff0c;所以我将电脑的驱动进行降级为cuda版本为10.1的。 最后成功安装cuda10.1版本的驱动 …...

1 认识微服务

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…...

PHP+SOCKET 服务端多进程处理多客户端请求 demo

服务端 $socket socket_create(AF_INET,SOCK_STREAM,SOL_TCP); socket_bind($socket,0,95012) or die( server bind fail: . socket_strerror(socket_last_error())); socket_listen($socket,5);$child 0; //初始化子进程数 while(true){$client socket_accept($socket);$pi…...

Matplotlib笔记:安装Matplotlib+常用绘图

Matplotlib Python的2D绘图库 安装Matplotlib 打开Anaconda Prompt切换环境&#xff08;默认是base&#xff0c;无需切换&#xff09;输入命令行安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib3.5.2 绘图 导入import matplotlib.pyplot as plt …...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...