我正在开发一款关于android的游戏,"Space RPG" - 目前只在大多数Galaxy S4和HTC Ones上看到这个错误.这都是Java.
游戏将停止,当我尝试调试进程并暂停有问题的线程时,它将不会挂起,并且会发生旋转挂起错误.线程转储让我看到它在一个特定的while循环中,它正在采取所需的"结束位置"并在不断增加的距离步骤向后迭代以找到"起始位置".
这是事情变得烦人的地方.我可以验证循环无法无限运行,即使条件是while(true),在我的break被调用之前它不可能运行超过200次迭代(这个断言由正在运行的代码备份)我试过的每一部电话).
为了帮助我缓解这个问题,我在循环中添加了一个简单的递增变量,如果它超过1000,它会记录一些东西,所以我可以看到DID运行太多次,以防万一设置了一些变量严重或某事. 当此计数器代码存在时,不会发生崩溃/挂起.我也没有看到任何日志表明它跑了1000多次.
如果我删除此计数器,则每次播放5-10秒后都会发生挂起[其中while循环可能会运行10次,尽管有所不同].
因此,我的问题是,到底发生了什么?:P为什么这些较新的手机(但似乎没有旧款手机)在执行有效工作的循环中存在问题,并且在没有增量变量的情况下不会持续很长时间.线程如何可能在该循环中停止,以及如何使用额外的计数器变量来解决问题?这项工作是在opengl渲染线程上完成的,如果这很重要的话.
我有关于大多数S4发生这种情况的报告,但至少有一个S4在那里没有发生.我今天使用的那个正在发生.这让我想知道它是否可能与特定的android,java,dalvik或手机上的其他东西有关,但遗憾的是我没有从S4工作的任何细节.
非常感谢任何有关此类内容的帮助,指导,想法或进一步阅读.
float vel = 1.0f; // final velocity is 1. We are working backwards to find out what the starting velocity will need to be.
int i = 0;
double xmath = Math.sin(rot* (Math.PI/180.0f)); // component of velocity for x,y direction based on rotation
double ymath = Math.cos(rot* (Math.PI/180.0f));
while (true) {
/* with this section uncommented, the stall never happens...
++i;
if (i>1000) {
// Something …Run Code Online (Sandbox Code Playgroud) 我的应用程序有 100% 用 Java 编写的代码,它不需要进行任何繁重的操作。
应用程序本身仅使用下一个库,但它们都没有 JNI 代码:
今天我收到一个奇怪的崩溃报告,它没有显示任何正常的异常信息。
该报告是通过装有 Android 4.4 的“Galaxy S5 (klte)”设备发送的。
这是崩溃报告的标题:
Native crash at /dev/ashmem/dalvik-jit-code-cache in
/dev/ashmem/dalvik-jit-code-cache (deleted)
Run Code Online (Sandbox Code Playgroud)
这是崩溃内容:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'samsung/kltexx/klte:4.4.2/KOT49H/G900FXXU1ANE2:user/release-keys'
Revision: '14'
pid: 11904, tid: 11904, name: .lb.app_manager >>> com.lb.app_manager <<<
signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 6d7b97cc SOME_NUMBERS
backtrace:
#00 pc 00026a56 /dev/ashmem/dalvik-jit-code-cache (deleted)
#01 pc 00026a55 /dev/ashmem/dalvik-jit-code-cache (deleted) …Run Code Online (Sandbox Code Playgroud) 我有大约700个测试要执行.当我全部运行时,出现了崩溃
"由于'进程崩溃,仪表运行失败.'"检查设备logcat以获取详细信息.测试运行失败:由于"进程崩溃",仪表运行失败.
经过一段时间的执行,大约10分钟和~360-370th执行测试.
Logcat不包含有关此崩溃的任何信息
它适用于从Android Studio,cmd(在PC和Mac上)运行.使用的设备 - Android 4.1.1上的Samsung S3
build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 18
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.xxx.yyy"
minSdkVersion 9
targetSdkVersion 18
testApplicationId "com.xxx.zzz"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
project.gradle.taskGraph.whenReady {
connectedAndroidTestDebug {
ignoreFailures = true
}
}
}
repositories {
// The …Run Code Online (Sandbox Code Playgroud) crash android automated-tests unit-testing android-instrumentation