首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android客户端性能异常类

Android客户端性能异常类 影响app体验的通用类问题可以分为两大类:超时和崩溃。 超时 (Time Out) 没有在用户的预期内及时的响应用户的请求和交互。...超时的原因: UI线程中block的操作; IO/数据库/网络耗时操作; 复杂不合理的布局; overdraw的过度绘制; 内存使用异常导致的卡顿,例如内存抖动或泄露等导致GC的次数增多,消耗在GC的时间长...类型 破坏性 解决难度 ANR 低 中 Java Crash 低 低 Native Crash 低 低 Java崩溃 可分为三大类:check异常,runtime异常,错误; 这里的crash都会抓到完整的调用栈信息...,且大部分和业务侧的逻辑使用相关 checked异常:由编程与环境互动造成程序在运行时出错,编译时异常 Error类:通常是指Java的内部错误以及如资源耗尽的错误 runtime异常:运行时异常 常见原因...: Native崩溃 主动类:运行时框架代码或业务代码发现的状态异常,代码运行过程中主动触发;这类异常在预期范围内,通过此类方法暴露问题。

4.1K10

01.Android崩溃Crash封装库

手机信息,app信息,崩溃堆栈,内存信息等 5.异常崩溃如何友好退出,以及崩溃后调用重启app是否会出现数据异常 6.针对native代码崩溃,如何记录日志写到文件中 该库可以做一些什么 1.在Android...如果您的应用程序初始化监听或错误活动崩溃,则有可能进入无限重启循环(在大多数情况下,库会对此进行检查,但在极少数情况下可能会发生)。...例如运行时间、是否加载了补丁、是否是全新安装或升级等) 07.异常栈轨迹原理 Android发生异常为何崩溃 一旦线程出现抛出异常,并且我们没有捕捉的情况下,JVM将调用Thread中的dispatchUncaughtException...关于上传日志介绍 设置该异常初始化后,在进入全局异常时系统就提示尽快收集信息,进程将被结束,因此不可以在此时做网络上传崩溃信息。可以在此时将错误日志写入到file文件或者sp中。...fork出app进程后,在ActivityThread中,在main方法的最后调用了 Looper.loop(),在这个方法中处理主线程的任务调度,一旦执行完这个方法就意味着APP被退出了。

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    推荐一款好用的APP性能测试工具——Monkey!

    这个类里面 Exec可以理解为执行 app_process:Android上app_process启动java进程 $* :传递给脚本或函数的所有参数 4. monkey命令的执行方式 运行 Monkey...,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。...如果不设置此项,monkey遇到上述崩溃或异常将停止运行。...问题定位 一般测试结果分析-搜索关键字: 程序无响应,ANR问题:在日志中搜索“ANR” ANR 是 Android 的一个错误,在页面无法响应事件的时候会报出来。...:在日志中搜索 “ANR” 崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常: 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException

    6K21

    【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常;  -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- Android...包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包 (6类), android.net.nsd 包 (3接口, 2类), android.net.rtp...(4类), android.net.sip 包 (1接口, 9类, 1异常), android.net.wifi 包 (16类, 1枚举), android.net.wifi.p2p 包 (9接口,...ACK响应 : 不通知应用程序, 在另外2小时 没有数据传输之后, TCP 继续发送一个探头; -- 同位体通过 RST 响应 : 通知本地 TCP 同位体主机 崩溃, 关闭socket 重启主机; -..., 如果传入其它内容 都会启用该选项; -- 异常 : 如果选项匹配错误, 或者 socket 关闭 等错误, 就会报出 SocketException 异常; Object getOption(int

    97230

    【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因

    2、Native Crash 通过NDK,使用C/C++开发,导致进程收到错误信号,发生Crash,Android 5.0之前进程直接退出(闪退) , Android 5.0之后会弹“程序已崩溃”的对话框...调用栈:#00是栈顶,#02是栈底,#02调用#01调用#00方法,#00的方法时libspirit.so中的Spirit类下的testCrash方法,出错的地方是testCrash方法内汇编偏移17(...这时查看Crash时显示的调用栈,和野指针所在的代码部分,有可能基本上没有任何关联。 解决方法 在指针变量定义时,一定要初始化,特别是在结构体或类中的成员指针变量。...解决方法 在书写输出格式和参数时,要做到参数个数和类型都要与输出格式一致。 在GCC的编译选项中加入-wformat,让GCC在编译时检测出此类错误。...如果不是黑客故意攻击,那么最终函数调用很可能会跳转到无法读写的内存区域,产生段错误信号SIGSEGV或SIGABRT,造成程序崩溃,并生成core文件。

    4.2K62

    01.崩溃捕获设计实践方案

    exit 退出时 如果有未捕获的异常,则会调用 Thread.dispatchUncaughtException 方法。...这个则是java层处理异常的入口! 3.5 理解异常栈轨迹链 来看一个简单的崩溃日志,如下所示: 那么这个崩溃日志,是怎么形成的崩溃异常链的?简单来说,在方法调用链路中,存在栈管理。...异常实例的构造十分昂贵 由于在构造异常实例时,JVM 需要生成该异常的栈轨迹,该操作逐一访问当前线程的 Java 栈桢,并且记录下各种调试信息,包括栈桢所指向方法的名字、方法所在的类名以及方法在源代码中的位置等信息...当程序触发异常时,JVM 会检测触发异常的字节码的索引值落到哪个异常表的 from-to 范围内,然后再判断异常类型是否匹配,匹配就开始执行 target 处字节码处理该异常。...图中显示的是,在执行到 add() 函数时,函数调用栈的情况。 - !

    44420

    学(kao)习(bei)官方关于64k异常处理 ^_^

    这些错误状况都会显示下面这个数字:65536。这个数字很重要,因为它代表的是单个 Dalvik Executable (DEX) 字节码文件内的代码可调用的引用总数。...Dalvik Executable 规范将可在单个 DEX 文件内可引用的方法总数限制在 65,536,其中包括 Android 框架方法、库方法以及代码中的方法。...在计算机科学领域内,术语千(简称 K)表示 1024(或 2^10)。...规避 64K 限制前提 在将应用配置为支持使用 64K 或更多方法引用之前,我们应该采取措施减少应用代码调用的引用总数,包括由应用代码或包含的库定义的方法。...例如,如果代码使用自检机制或从原生代码调用 Java 方法,那么这些类可能不会被识别为主 DEX 文件中的必需项。

    97620

    Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^

    前言 随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下: ? 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: ?...Dalvik Executable 规范将可在单个 DEX 文件内可引用的方法总数限制在 65,536,其中包括 Android 框架方法、库方法以及代码中的方法。...在计算机科学领域内,术语千(简称 K)表示 1024(或 2^10)。...规避 64K 限制前提 在将应用配置为支持使用 64K 或更多方法引用之前,我们应该采取措施减少应用代码调用的引用总数,包括由应用代码或包含的库定义的方法。...例如,如果代码使用自检机制或从原生代码调用 Java 方法,那么这些类可能不会被识别为主 DEX 文件中的必需项。

    83410

    App怎么做才能永不崩溃

    一般会手写一个工具类,然后在可能出问题的地方通过特殊的方法进行记录日志,然后找时机上传 这位同学,你是不是没有睡醒,我问的是异常日志,是你未知状态的异常,难道你要把整个项目try住?...应该是系统结束了整个程序进程吧 那出现异常了,程序一定会停止运行么? 嗯...应该会.....吧 在未知异常的情况下,有办法让程序不崩溃么? 嗯...应该可以吧......首先,try catch使用,要尽可能的缩小作用域,当try catch作用域内未抛出异常时,性能影响并不大,但是只要抛出了异常就对性能影响是成倍的。...这个问题需要了解下Android 的异常处理机制,在我们未设置Thread.UncaughtExceptionHandler之前,系统会默认设置一个,具体我们参考下ZygoteInit.zygoteInit...既然用户无响应是Looper退出循环导致的,那我们启动循环不就解决了么,只需要通过以下方式,在Application onCreate()调用 Handler(mainLooper).post {

    66440

    2016 移动应用质量大数据报告

    • 应用分类中视频、社交等行业崩溃率较高 Android应用行业整体崩溃率在2.0%~3.6%之间。其中视频、社交、音乐类应用的崩溃率较高,出行、新闻、儿童类应用的崩溃率较低。 ?...• Android应用闪退现象更加严重 相较于2015年, 闪退(启动后0~5s内崩溃)问题占比提升10个百分点(12%提升到22%),Android系统由于其碎片化特征,厂商、机型、系统版本、分辨率等适配问题...• 造成闪退最常见的几种异常原因 根据数据分析,导致闪退问题除空指针异常外,找不到类和方法、权限问题、so加载异常、状态异常等问题比较明显,71%的闪退是由这5种问题引起,机型适配测试可以有效降低闪退问题的发生...• iOS应用不同行业间崩溃率差距较大 iOS应用行业整体崩溃率在1.6%~4.6%之间,崩溃较低的行业如导航、商品指南类应用保持在2%以下,体育、社交、图书行业崩溃率在4%以上。 ?...• 游戏行业崩溃率相对较高 iOS游戏崩溃率在4.2%~9.9%之间,其中体育竞技类游戏的崩溃率最高。 ?

    2.4K50

    Android开发笔记(七十八)异常容错处理

    运行时异常有的在程序运行时才会发现,但也有的在编码时就得处理,比如说非法参数异常IllegalArgumentException、非法状态异常IllegalStateException等等。...所以如果可以的话,尽量在代码中预先判断条件是否合法,不要等到程序扔出异常时才处理,例如: 1、使用某对象的方法或属性时,要先判断该对象是否为空,避免扔出空指针异常; 2、使用下标访问数组元素时,要先判断下标是否大于数组长度...,避免扔出数组越界异常; 3、在转换对象类型时,要先用instanof关键字判断类型是否正确,避免扔出类型转换异常; 4、在访问文件时,要先用exists方法判断文件是否存在,避免扔出文件不存在异常...自动捕获未知异常的主要思路是,在Application注册一个实现了UncaughtExceptionHandler的对象,然后在该对象中调用方法Thread.setDefaultUncaughtExceptionHandler...设置未知异常的处理器;同时该对象自身需实现uncaughtException方法,在uncaughtException方法中记录异常信息,以及设备的环境信息,所有这些信息保存在本地的文件中。

    84020

    Android性能优化(一)

    在第②个时间段内,启动进程、调用无界面 Activity 的 onCreate() 等、 pause/finish 无界面的 Activity....在第③个时间段内,调用有界面 Activity 的 onCreate、onResume....Android 的两种崩溃: Java 崩溃 Native 崩溃 简单来说,Java 崩溃就是在 Java 代码中,出现了未捕获异常,导致程序异常退出。...被 low memory killer 杀掉、从系统的任务管理器中划掉等 ANR 我们可以在应用启动的时候设定一个标志,在主动自杀或崩溃后更新标志,这样下次启动时通过检测这个标志就能确认运行期间是否发生过异常退出...所需的内存空间会在编译期间完成分配,进入一个方法时在帧中局部变量表的空间是完全确定的,不需要运行时改变 若线程申请的栈深度大于虚拟机允许的最大深度,会抛出SatckOverFlowError错误 虚拟机动态扩展时

    2.7K20

    android程序崩溃后重启

    有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问题...首先捕获程序崩溃的异常就必须了解一下java中UncaughtExceptionHandler这个接口,android沿用了此接口,在android API中: ?...在实现UncaughtExceptionHandler时,必须重载uncaughtException(Thread thread, Throwable ex) ,如果我们没有实现该接口 也就是没有显示捕捉异常...reload 他们的方法能够捕获异常,杀死异常进程,但是却不能够重新启动应用。...如何杀死异常进程,重启应用,就得使用PendingIntent,这个类是android中对Intent类的包装,具体了解我会在写一篇博客,自己也可以去查看android API。

    2.2K70

    Android NDK开发入门

    官方示例 默认创建Android NDK工程时,Android提供了一个简单的JNI交互示例,返回一个字符串给Java层,方法名的格式为:Java_包名_类名_方法名 。...JNI 1,JNI开发流程 编写java类,声明了native方法; 编写native代码; 将native代码编译成so文件; 在java类中引入so库,调用native方法; 2,native方法命名...4.2.2 异常处理 在使用GetStringUTFChars的时候,返回的值可能为NULL,这时需要处理一下,否则继续往下面走的话,使用这个字符串的时候会出现问题.因为调用这个方法时,是拷贝,JVM为新生成的字符串分配内存空间...调用Java对象的setAge和getAge方法,获取返回值,打印结果。 删除引用。 NDK错误定位 由于NDK大部分的逻辑是在C/C++完成的,当NDK发生错误某种致命的错误的时候导致APP闪退。...对于这类错误问题是非常不好排查的,比如内存地址访问错误、使用野指针、内存泄露、堆栈溢出等native错误都会导致APP崩溃。 虽然这些NDK错误不好排查,但是我们在NDK错误发生后也不是毫无办法可言。

    1.7K50

    减少崩溃,提升体验 | 使用 Kotlin 打造优质应用

    整体上看,Kotlin 的空安全特性帮助点评 Android 应用将空指针导致的崩溃从日均 3 个降低至 0。...避免 NullPointerException NullPointerException (空指针异常) 是 Google Play 上崩溃的第一大原因。...团队成功将空指针异常的出现概率 降低了 80% 之多。 为了避免 NullPointerException,您需要确保正在处理的对象引用非 null,然后再调用方法或尝试访问其成员。...然而,经常会发生忘记实现其中一个方法或者在类中添加新属性时忘记更新。当处理仅用于保存数据的类时,请使用 Kotlin 数据类。...在 Java 编程语言中,对于原语,您始终会使用 ==,因此,一个常见的错误是为对象也调用 == (引用相等),而实际上您想检查它们是否在结构上相等 (通过调用 equals() 检查)。

    1.4K10

    全系统栈崩溃是什么鬼?手机管家高级工程师 jaylin,教你如何抓鬼!

    1 通过Android源码分析问题根源 先从系统源码找到出现这个异常的地方,看看能不能找到什么线索,从代码堆栈中看到在ViewRootImpl类出现问题,先找到这个类的relayoutWindow方法...类的relayoutWindow方法,如下图: 从这里终于看到了抛出异常的地方,与崩溃堆栈相吻合,正是用IPC调用WindowManager的方法时出现的异常,通过对源码的阅读,问题的根源也很明显了,...在这里插一句,在Bugly崩溃分析平台上,对发生的崩溃问题是有系统、机型等兼容分析后的数据,这有助于开发在分析问题时,可以快速确定是否与系统或机型相关,提高解决问题效率。...大家在选择崩溃分析工具时,也可以关注下这点。...对于这个问题,我们找到了一台出现这个崩溃的机器并重现出来了,得到的崩溃堆栈信息跟上面完全一样。实际上这个问题是在程序中制造了一个ANR,系统有Bug导致在执行dump信息的方法时出现崩溃。

    1.2K40

    Kotlin 开发中遇到的坑(持续更新)

    ,会报异常 var strAble1 = text as String //错误写法2,text不是String时,同样会报异常 var strAble2 = text as String?...计算时的消耗很少。 同时多次调用有相同的返回值。 3.2、使用 lateinit 有些情况我们不能使用 val,比如,在 Android 中某些属性需要在 onCreate() 方法中初始化。...:"android coder" } 3.6、自定义崩溃信息 如果我们使用 !!,那么当这个变量为 null 时,只会简单的抛出一个 KotlinNullPointerException。...原因是:Person在被转Java代码时,只会生成一个包含两个参数的构造方法,没有提供默认的构造方法。Gson在通过反射创建对象时,会优先尝试获取无参构造函数。...如果没有找到无参构造函数时,它就直接通过Unsafe的方法,绕过了构造方法,直接构建了一个对象。 因此我们在使用 data class,在遇到上面类似需求的时候,最好提供一个无参构造方法。

    4.6K02

    如何配置 SLO

    (Crash)用户率目标 衡量手机 App (iOS 和 Android) 的可用性和可靠性的最重要指标之一是 无崩溃用户率。...还有一种,请求执行过程中没有抛出错误(日志或异常)的请求视为成功。 服务性能目标 重点在于性能。...例如: •fast:0 - 3s 内完成服务调用() •normal:3 - 5s 内完成服务调用 •slow:5s 以上完成服务调用或超时 ℹ️ 提示: 当然,上边的 3s 也不应该是拍脑袋想的,而应该是例如基于过去一个月系统正常运行时...错误率:是在给定的一小时间隔内,DB 的失败 SQL 执行次数除以总 SQL 执行次数。...读错误率:是在给定的一小时间隔内,DB 的失败查询 SQL 执行次数除以总 SQL 执行次数。

    1.2K11

    五年Android开发,让我“刻骨铭心”的那些坑

    Activity的onCreate方法之后再才调用上个Activity实例的onDestory方法,导致文件刚被打开就关闭了,在程序使用数据时Crash掉; 解决方案:准确来讲只要是系统方法,调用时机都不确定...: 问题现象:程序随机崩溃; 原因分析:多个地方用到了同一个类,该类用于对数据的IO操作,打开文件后并没有立即关闭,也没有释放资源的public方法,主要通过类的finalize方法关闭文件,释放资源...; 解决方案:finalize方法的调用时机是不确定的,不要指望通过该方法释放与类相关的资源,避免出现随机的bug; Fragment isAdded: 问题现象:程序随机崩溃; 原因分析:跟踪异常...,但此时Fragment没有完全显示或者已经离开Fragment; 解决方案:在调用Fragment的方法之前,强烈建议调用isAdded方法判断Fragment是否依附在Activity上,避免出现异常...通过反射访问方法和字段的效率大不一样: 问题现象:程序运行卡、慢; 原因分析:在一个循环中使用到了反射,并且是调用的反射方法,改成反射字段后,卡、慢的现象得到明显的改善; 解决方案:通过反射修改或者获取类中的某个属性时

    1.5K40
    领券