【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 ...
 
随机推荐
- Xcode修改个性化注释
			
1.首先找到Xcode进入包内容 2.依次进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develo ...
 - wordpress搬家到 linode 步骤简析
			
1. 购买并安装系统 购买就不说了哈,英文不好的自己搜教程. 然后是安装系统 linode 系统安装: 购买完成后登录,进入找到购买的vps ,点击 Dashboard (控制面板) 进入后点击 面板 ...
 - ldap数据库--ODSEE--卸载
			
针对ldap实例的卸载,即删除,可以通过管理界面进行操作也可以通过命令行进行操作.卸载顺序为ldap实例--agent--ads.这里主要介绍命令操作步骤 1,ldap实例卸载 从ads注销,即不在需 ...
 - Python概述与安装
			
Python 一门面向对象的解释性语言. Python优点 开发效率高(有丰富的各种类库,不需要重复造轮子):可移植性:解释性:免费开源:交互式(IDLE,代码写一行执行一行) Python缺点 相对 ...
 - vue新手入门——vue-cli搭建
			
首先说明,以下内容vue官网都有文档,如果觉得麻烦啰嗦,请移步至 安装-vue.js . 准备工作: 1.下载并安装node环境,一般情况下安装好node之后,npm也会安装好.具体安装的话,百度大概 ...
 - 通过游戏认识 ---   JQuery与原生JS的差异
			
前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...
 - java SE 基础概念梳理(一)
			
(一)First 摘要:Java概述.Java开发环境搭建.程序开发流程 Java概述 Java的应用 开发QQ.迅雷程序(桌面应用软件)开发淘宝.京东(互联网应用软件) Java的擅长 互联网: ...
 - [最短路]信使(msner)
			
[题目描述] 战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位).指挥部设在第一个哨所.当指挥部下达一个命令后 ...
 - 前端学习记录之Javascript-DOM
			
简介 为了快捷方便,在工作和项目中,一直都是使用的框架,比如jqeruy,vuejs,react等.然后在长时间使用框架后,往往有一个后遗症,就是对于原生的Javascript基本上已经不知道怎么写了 ...
 - SparseArray,SparseBooleanArray和SparseIntArray
			
package android.util; import com.android.internal.util.ArrayUtils; /** * SparseArrays 利用integer去管理ob ...