strictmode android,Android 应用性能优化-StrictMode(严格模式)

strictmode android,Android 应用性能优化-StrictMode(严格模式)UI线程如果被阻塞5秒的话,那么应用程序此时就会弹出ANR的对话框,ANR对应用程序来说是一个很严重的问题。如何防止应用程序出现ANR,怎么分析查看导致ANR问题的原因?我们来介绍Android的严格模式。怎样开启严格模式有两种开启方式。开发者选项进入开发者选项,里面找到启用严格模式,打开。当应用主线程执行长时间操作的话会闪锁屏幕。StrictModeAPI(代码调用)可以在Activit…

大家好,又见面了,我是你们的朋友全栈君。

UI线程如果被阻塞5秒的话,那么应用程序此时就会弹出ANR的对话框,ANR对应用程序来说是一个很严重的问题。 如何防止应用程序出现ANR,怎么分析查看导致ANR问题的原因? 我们来介绍Android的严格模式。

怎样开启严格模式

有两种开启方式。

开发者选项

进入开发者选项,里面找到启用严格模式,打开。 当应用主线程执行长时间操作的话会闪锁屏幕。

StrictMode API(代码调用)

可以在Activity或者自定义的Application类的onCreate方法里面开启StrictMode。

// 设置线程策略

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads() // 磁盘读

.detectDiskWrites() // 磁盘写

.detectNetwork() // 网络

.penaltyLog()

.build());

// 设置VM策略

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectActivityLeaks()

.detectLeakedSqlLiteObjects() // SQLite 对象

.detectLeakedClosableObjects()

.penaltyLog()

.penaltyDeath() // 触发违规操作,kill应用

.build());

怎样使用StrictMode API

StrictMode可以理解为设置策略、侦测违规操作、惩罚。

设置策略有两种

setThreadPolicy // 设置线程策略

setVmPolicy // 设置VM策略

侦测违规操作包含如下,可分为线程策略可侦测的违规操作和 VM策略可侦测的违规操作

线程策略可侦测的违规操作

detectDiskReads()

detectDiskWrites()

detectNetwork()

detectCustomSlowCalls()

VM策略可侦测的违规操作

detectActivityLeaks()

detectLeakedSqlLiteObjects()

detectLeakedClosableObjects()

detectFileUriExposure()

detectLeakedRegistrationObjects()

惩罚方式

penaltyLog() // 打印log

penaltyDeath() // 杀掉进程

penaltyDialog() // 弹出对话框

怎样分析StrictMode Log

可以通过 adb shell 来过滤StrictMode log。

adb logcat -s StrictMode

过滤StrictMode log如下:

02-12 21:43:41.580: E/StrictMode(14269): class com.test.TestActivity; instances=2; limit=1

02-12 21:43:41.580: E/StrictMode(14269): android.os.StrictMode$InstanceCountViolation: class com.example.testa.BActivity; instances=2; limit=1

02-12 21:43:41.580: E/StrictMode(14269): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

instances=2 limit=1,说名限制的TestActivity实例只能是一个,却有两个实例,说明TestActivity有内存泄漏。

其他StrictMode Log 可以根据上下文的描述分析是什么违规导致。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141693.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 抖音网红简易时钟代码

    抖音网红简易时钟代码<template><divclass=”clock”><!–线–><hrstyle=”width:350px;position:absolute;top:368px;right:0;”><!–时–><ulcl…

    2022年6月28日
    40
  • layui 传递前端请求_layui弹出层如何传值

    layui 传递前端请求_layui弹出层如何传值layui弹出层传值的实现方法:1、从主窗口传值到弹出层;2、从弹出层传值到主窗口;3、通过session互传;4、通过调用父窗口的函数从而获取到父窗口的值。本教程操作环境:Windows7系统、layui1.0版,该方法适用于所有品牌电脑。主要有两部分从主窗口传值到弹出层从弹出层传值到主窗口通过session互传通过调用父窗口的函数从而获取到父窗口的值(相反也是可以的)1、从主窗口传值到弹出层首…

    2022年6月6日
    153
  • LARGE_INTEGER类型和QueryPerformanceFrequency()「建议收藏」

    LARGE_INTEGER类型和QueryPerformanceFrequency()「建议收藏」LARGE_INTEGER类型和QueryPerformanceFrequency()LARGE_INTEGERLARGE_INTEGER是union,用于表示一个64位有符号整数值,其他定义如下:Typedefunion_LARGE_INTEGER{Struct{ DWORD  LowPart;    LONG    HighPart;    };LO…

    2022年7月16日
    9
  • iOS charles 抓包使用[通俗易懂]

    iOS charles 抓包使用[通俗易懂]参考链接:Charles抓包使用教程-MAC-黒貓-博客园部分APP无法代理抓包的原因及解决方法(flutter抓包)-lulianqi15-博客园建议最好从官网下载应用,1个月免费使用,可以使用注册码来激活,链接如下:DownloadaFreeTrialofCharles•CharlesWebDebuggingProxycharles连接手机可以参考链接1,非常详细,珠玉在前,不在赘述;*****连接步骤简述*****下载c.

    2022年6月7日
    86
  • asp.net 可选可输入的dropdownlist

    asp.net 可选可输入的dropdownlistasp.net 可选可输入的dropdownlist

    2022年4月24日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号