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

访问AssetManager时的Anr

访问AssetManager时的ANR(Application Not Responding)是指在Android应用程序中,当主线程被阻塞或长时间未响应用户交互时,系统会弹出ANR对话框,提示用户应用程序无响应。在访问AssetManager时发生ANR通常是由于主线程执行了耗时操作,导致无法及时响应用户操作。

AssetManager是Android系统提供的一个用于管理应用程序资源的类。它可以加载应用程序的资源文件,如图片、音频、视频等,并提供了访问这些资源的方法。在访问AssetManager时,应避免在主线程中执行耗时操作,以免引发ANR。

为了避免访问AssetManager时的ANR,可以采取以下措施:

  1. 异步加载资源:将资源加载操作放在后台线程中执行,避免阻塞主线程。可以使用线程、Handler、AsyncTask等方式实现异步加载。
  2. 使用缓存:在资源加载完成后,将资源缓存起来,避免重复加载。可以使用LruCache等缓存机制来管理资源。
  3. 延迟加载:在应用程序启动时,不要一次性加载所有资源,而是根据需要进行延迟加载。可以根据页面展示情况或用户操作来动态加载资源。
  4. 优化资源大小:对于大型资源文件,可以进行压缩或优化处理,减小资源文件的大小,提高加载速度。
  5. 使用合适的线程池:在进行资源加载时,可以使用线程池来管理线程,避免线程过多导致资源竞争和性能问题。

腾讯云提供了丰富的云计算产品,其中与资源管理相关的产品包括对象存储(COS)和内容分发网络(CDN)。对象存储(COS)提供了高可靠、低成本的云存储服务,可以用于存储和管理应用程序的资源文件。内容分发网络(CDN)可以加速资源文件的传输,提高用户访问的响应速度。

腾讯云对象存储(COS)产品介绍:https://cloud.tencent.com/product/cos

腾讯云内容分发网络(CDN)产品介绍:https://cloud.tencent.com/product/cdn

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ANR问题定位与分析

【前言】 ANR问题,相信是日常应用测试中,各位小伙伴都会遇到问题。本篇对ANR类型、原因及出现场景、以及ANR定位与分析思路进行了总结! ? 【一....ANR定位与分析】 1. ANR分析思路——traces 通常发生ANR,首先去查找对应Trace(重要进程各个线程调用栈trace信息)日志,看看主线程是否在处理该广播或被阻塞。...trace路径:/data/anr/traces.txt trace导出:adb pull/data/anr/traces.txt 最新ANR信息在最开始部分,我们从stacktrace中即可找到出问题具体行数...特别注意:产生新ANR,原来 traces.txt 文件会被覆盖。 2....当然,发现Free和Other整体数值都偏低,Kernel会进行一定程度内存交换,导致整个系统卡顿。

3.6K30
  • Android ANR(Application Not Responding)分析

    Android ANR(Application Not Responding)分析 ANR (Application Not Responding)   ANR定义:在Android上,如果你应用程序有一段时间响应不够灵敏...所以一个流畅合理应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能设计很重要,这样系统不会显示ANR给用户。...当它监测到以下情况中一个,Android就会针对特定应用程序显示ANR: 1.在5秒内没有响应输入事件(例如,按键按下,屏幕触摸) 2.BroadcastReceiver在10秒内没有执行完毕...替代方法是,主线程应该为子线程提供一个Handler,以便完成能够提交给主线程。...如果你应用程序在响应Intent广 播需要向用户展示什么,你应该使用Notification Manager来实现。

    67631

    OpenResty + Lua访问Redis,实现高并发访问毫秒级响应打回

    配置依赖: 1、OpenRestylua访问redis插件:https://github.com/openresty/lua-resty-redis 下载后,导入对应插件: lua_package_path...lua;;"; lua_need_request_body on; 2、使用lua访问redis: server {         location /test {             content_by_lua_block...访问:使用 auth 方法 local ok, err = red.connect(red, "127.0.0.1", "6379")     if not ok then         return...前端http查询一些数据,直接在nginx中通过lua访问redis拿到,直接返回到前端,减少服务器压力;redis中数据通过服务器进行主动更新 (2)点击次数和页面打开次数分析:在点击和页面打开之间...,加上了请求到达nginx统计,当请求到达nginx,通过lua将访问页面次数写入redis中,然后通过点击次数、nginx获得请求次数、页面打开次数进行具体业务分析

    5.7K30

    Android 产生ANRTrace文件解析

    第一个框中第一二行说明了发生ANR进程ID,名称和时间 第三个框中 "main" prio=5 tid=1 Native 说明了线程名称,线程优先级,线程锁id和线程状态。...MONITOR状态一般是类同步块或者同步方法造成,而SUSPEND状态是debugger时候会出现,可以用来区别是不是真的是用户正常操作跑出来ANR | group="main" sCount=1...970474 ) utm=71464 stm=9347 core=3 HZ=100 接着state是调度状态,utm是线程用户态下使用时间值,stm是内核态下调度时间值,core是最后执行这个线程...大部分情况下trace文件顶部线程一般是ANR元凶,但是也有可能不是应用造成ANR。...死锁和等待也会造成ANR,比如线程状态为MONITOR时候正在执行一个同步块,但是锁却被另外一个线程拿着造成主线程阻塞(等待);死锁分析也是类似,发生死锁线程一般处于MONITOR状态或者WAIT

    70020

    Android 产生ANRTrace文件解析

    第一个框中第一二行说明了发生ANR进程ID,名称和时间 第三个框中 “main” prio=5 tid=1 Native 说明了线程名称,线程优先级,线程锁id和线程状态。...MONITOR状态一般是类同步块或者同步方法造成,而SUSPEND状态是debugger时候会出现,可以用来区别是不是真的是用户正常操作跑出来ANR | group=“main” sCount=1...970474 ) utm=71464 stm=9347 core=3 HZ=100 接着state是调度状态,utm是线程用户态下使用时间值,stm是内核态下调度时间值,core是最后执行这个线程...大部分情况下trace文件顶部线程一般是ANR元凶,但是也有可能不是应用造成ANR。...死锁和等待也会造成ANR,比如线程状态为MONITOR时候正在执行一个同步块,但是锁却被另外一个线程拿着造成主线程阻塞(等待);死锁分析也是类似,发生死锁线程一般处于MONITOR状态或者WAIT

    74130

    一个ANRlog带来优化

    相对于crash,anr是更难定位,特别是一些都是系统loganr,比如下面这种 #1 main Input dispatching timed out 1 android.os.BinderProxy.transactNative...都是系统代码,无法定位到问题,这个时候,可以看下其他线程信息,常常会有意外收获,比如下面这种 可以发现,出现anr时候,这里有名称叫MTPrimaryEglEngine线程正在执行判断文件是否可用方法...,连续看了多个anrlog,都是上报同样情况,相关代码如下 public static boolean isFileExist(String filePath) { if (TextUtils.isEmpty...,每次调用判断,都会导致3ms左右耗时,实在太严重了,同时,另外一个,判断文件存在方法File.exist()只有0.1ms左右,就合理多了 接下来尝试手动关闭App读取sd卡权限,发现isExternalStorageReadable...lazy,无奈这个库是多项目公用,还是用java) 这样的话,下次每次判断,只需要获取当前boolean值,非常轻量,问题修复,由于这个方法很多地方都会频繁调用,上线后,应该会对App整体性能有一些优化

    94610

    Android ANR分析(trace文件产生流程)

    dump trace信号 1.当一些带有超时机制系统消息(如:Service创建)判定超时后,会调用系统服务AMS接口,收集ANR相关信息并存档(data/anr/trace, data/system...总结; 将am_anr信息输出到EventLog(分析anr问题先看该log) 获取重要进程信息,java进程,和native进程 将ANRReason和CPU使用情况输出到main_log...在5.0之后采用是checkPoint进行dump信息) 发生ANR,systemServer进程会执行dumpStackTraces函数,在该函数中发SIGQUIT信号给对应进程(上面有分析到)...Runnable状态线程是一样,都是打印线程堆栈,并且最后修改引用计数让这些线程在切换状态继续运行。...函数,在发现当前线程有 checkpoint request, 会在这个点执行线程CheckPoint函数;如果发现当前线程有suspend request,会进行SuspendCheck,使得线程进入

    1.7K30

    Android ANR分析(trace文件产生流程)

    总结 将am_anr信息输出到EventLog(分析anr问题先看该log) 获取重要进程信息,java进程,和native进程 将ANRReason和CPU使用情况输出到main_log...在5.0之后采用是checkPoint进行dump信息 发生ANR,systemServer进程会执行dumpStackTraces函数,在该函数中发SIGQUIT信号给对应进程(上面有分析到)...Runnable状态线程是一样,都是打印线程堆栈,并且最后修改引用计数让这些线程在切换状态继续运行。...函数,在发现当前线程有 checkpoint request, 会在这个点执行线程CheckPoint函数;如果发现当前线程有suspend request,会进行SuspendCheck,使得线程进入...safepoint动作,并在发现需要进入safepoint跳转到相应处理程序里。

    1K40

    访问Tomcat无需加端口号

    整合Apache和Tomcat,使得Java工程和PHP工程都能共用80端口,访问网站,无需在地址栏中加端口号,具体实现如下,感兴趣朋友可以参考下哈 目的: 整合Apache和Tomcat,使得Java...工程和PHP工程都能共用80端口,访问网站,无需在地址栏中加端口号。...7.0.37 准备工作: 下载mod_jk.so http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/ 打开链接找到合适文件下载...:80 ServerName localhost:80 最后一行添加 Include conf/mod_jk.conf 找到DocumentRoot,记住它值,后面有用。...,也就是说必须和tomcat下工程名一致 修改Tomcat相关文件 1、在tomcat下添加ROOT.xml 我目录是这样:/opt/tomcat/conf/Catalina/localhost

    1K70

    携程Android App插件化和动态加载实践

    ,在Win7机械硬盘开发机上编译时间曾突破1小,令人发指龟速编译让开发人员叫苦不迭(当然现在换成Mac+SSD快太多)。...启动速度提升 Google提供MultiDex方案,会在主线程中执行所有dex解压、dexopt、加载操作,这是一个非常漫长过程,用户会明显看到长久黑屏,更容易造成主线程ANR,导致首次启动初始化失败...运行时动态加载改造(宿主程序动态加载插件,有两个壁垒需要突破:资源如何访问,代码如何访问)。 插件资源编译 ,针对插件资源编译,我们需要考虑到以下几点: 使用-I参数对宿主apk进行引用。...接下来我们看看在运行时插件们是如何登台亮相。 运行时资源加载 平常我们使用资源,都是通过AssetManager类和Resources类来访问。获取它们方法位于Context类中。...外部访问资源能力。 对于极少数需要从外部访问apk资源场合(例如发送延时通知),此时App尚未启动,资源获取由系统代劳,理所当然无法洞悉内部插件资源位置和获取方式。

    1.1K70

    携程Android App插件化和动态加载框架

    ,在Win7机械硬盘开发机上编译时间曾突破1小,令人发指龟速编译让开发人员叫苦不迭(当然现在换成Mac+SSD快太多)。...可选模块按需下载 ​例如用于调试功能模块可以在需要进行下载后进行加载,减少App Size 列举了这么多痛点,童鞋们早就心潮澎湃按捺不住了吧?...运行时动态加载改造(宿主程序动态加载插件,有两个壁垒需要突破:资源如何访问,代码如何访问)。...接下来我们看看在运行时插件们是如何登台亮相。 运行时资源加载 平常我们使用资源,都是通过AssetManager类和Resources类来访问。获取它们方法位于Context类中。...暂时同样通过命名规范方式规避。 外部访问资源能力。

    938100

    「Learn」开发记录

    原框架下载文件功能有一个bug。如果下载抛出了异常,也会调用success回调。 这里是在下载记录目标文件长度,在success回调中检查本地文件大小与这个长度是否一致。...(AssetManager.java:500) android.content.res.AssetManager.xmlBlockGone(AssetManager.java:500) android.content.res.XmlBlock.decOpenCountLocked...死循环导致ANR 之前业务逻辑中,有一个随机添加不重复字符串功能。...伪随机数不能保证高效地不重复地取到新下标。 在某些性能较差手机上,陷入多次循环后有可能导致anranr message 表明此时CPU占用率超过100%。...不知道是不是开发姿势不对,快速点击某个按钮,对应BindingCommand并不能立即响应。连续点击会错过点击事件。

    1.2K20
    领券