【Android】定位与解决anr错误记录
问题描写叙述
cocos2d-x游戏项目androidproject接入sdk。支付成功后,java代码回调lua方法。产生了anr。
怎样定位anr?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluY2hhb2xvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在data/anr/traces.txt文件里记录和anr错误信息。能够使用RE管理器查看该文件。
在日志信息中能够看到回调方法中调用的cocos2d-x的音频引擎播放音效的方法。就在这里产生了anr。我这里使用的是cocos2d-x2.1.5。
找到出问题的根源后,我把播放音效的代码凝视了。然后再执行。就没有产生anr了。
可是,还有一个问题又出现了...
报了一个OpenGL error,创建CCSprite也失败了。出现这种问题通常是由于CCSpirte没有在GL线程中创建。
主线程与GL 线程
主线程(ui thread):app启动时创建的线程。其他线程都是该线程的子线程。主要用于更新UI的线程。
GL线程:主线程的一个子线程。主要用于更新GUI的线程。在Cocos2d-x中,会从主线程中分出一个GL线程用于画面渲染相关的工作(为了保证画面的流畅)。
Android下。Activity有一个runOnUiThread方法。该方法用于在主线程中运行一个任务。
注意,假设该任务比較耗时会产生anr。
方法的声明例如以下:
public void runOnUiThread(Runnable task);
在Android下OpenGL的渲染须要与GLSurfaceView打交道。
所以Cocos2d-x封装了一个Cocos2dxGLSurfaceView。该View是与GL线程相关的。
Cocos2dxActivity中包括了一个Cocos2dxGLSurfaceView。并提供一个runOnGLThread方法。该方法用于在GL线程中运行一个任务。
方法声明例如以下:
public void runOnGLThread(final Runnable task);
实现上是调用了GLSurfaceView的queueEvent方法实现与GL线程通信。
实现机制还是Android下的消息轮询。
最后,通过runOnGLThread方法,在GL线程中回调lua方法。问题就彻底攻克了。
ctx.runOnGLThread(new Runnable() {
@Override
public void run() {
PayTools.payCallback(); //lua方法须要在GL线程中调用
}
});
【Android】定位与解决anr错误记录的更多相关文章
- Android Studio 错误: 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum
在导入eclipse项目到Android Studio出现这种错误, 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum.查阅后了解到Eclipse能够智能 ...
- Android开发技术周报183学习记录
Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...
- uploadify插件Http Error(302)错误记录(MVC)
由于项目(asp.net MVC)需要做一个附件上传的功能,使用的是jQuery的Uploadify插件的2.1.0版本,上传文件到自己项目指定的文件夹下面.做完之后,在谷歌上测试是正确的,在火狐上报 ...
- 开发错误记录8:Unable to instantiate application com
开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在And ...
- Android SDK代理服务器解决国内不能更新下载问题(转)
言:Android SDK代理服务器解决国内Android SDK不能更新下载问题,经常会遇到Fitch fail URL错误,要不就是Nothing was installed.目下Google遭受 ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- Android SDK代理服务器解决国内不能更新下载问题
原文地址:http://blog.csdn.net/boonya/article/details/38752647 读者须知:本篇文章中最靠谱的是第三种方式,最近有读者反映第三种方式也不行了,下面提供 ...
- [转]Android 如何有效的解决内存泄漏的问题
Android 如何有效的解决内存泄漏的问题 前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的 ...
- kerberos 配置错误记录
服务端错误记录: 1.服务端在创建数据库的时候报如下错误: # kdb5_util -s -r HADOOP.HOME 错误提示:kdb5_util: Improper format of Kerbe ...
随机推荐
- jquery操作html小技巧
1.隐藏table整列 $("#tableID tr").find('td:eq(N)').hide();
- Linux学习决心书
学习Linux决心计划书 我叫耿长学,来自河南省邓州市,经过老男孩教育运维班5个月学习后,我一定要达到的薪水目标是11000元,为了达到此目标我将采取如下10大行动或方案: 1.每天早上5:30-6: ...
- 一起写框架-Ioc内核容器的实现-基础功能-容器对象名默认首字母小写(八)
实现功能 --前面实现的代码-- 默认的对象名就类名.不符合Java的命名规范.我们希望默认的对象名首字母小写. 实现思路 创建一个命名规则的帮助类.实现将对大写开头的对象名修改为小写开头. 实现步骤 ...
- C#实现设置完整虚拟路径
){ mHttpUrl.Append(":"); mHttpUrl.Append(port);}string mServerName = "~/AppModu ...
- 【python】Python的单例模式
原文:http://blog.csdn.net/ghostfromheaven/article/details/7671853 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某 ...
- ButterKnife的使用以及不能自动生成代码问题的解决
ButterKnife的使用以及不能自动生成代码问题的解决 转载请注明出处:http://www.cnblogs.com/zhengjunfei/p/5910497.html 最近换了个工作刚入职,又 ...
- oracle数据库创建表,序列及添加代码案例
create table cdpt( id number(6), name varchar2(30), constraint pk_id primary key(id) ); 更改数据库的“延迟段创建 ...
- 这次真的忽略了一些ActiveMQ内心的娇艳
好久没总结了,内心有点空虚了,所以今天主要给园里的朋友们分享一点儿这几天使用ActiveMQ过程中踩过的小坑,虽然说这东西简单易用,代码几行配置也就几行,问题不大但是后果有点严重,所以就要必要总结一下 ...
- 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
在ERP中定义用户时. 报错: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 原因分析: ①没有正确初 ...
- webpack 3.X学习之JS压缩与打包HTML文件
js压缩 webpack自带一个插件uglifyjs-webpack-plugin来压缩js,所以不需要再次安装,当一切都准备妥当,引入uglifyjs-webpack-plugin模块: const ...