2011-12-31 45 views
4

我的应用程序有一个启动画面活动,并开始主要活动,其中有一个openGL视图的意图。Android activity quietly exiting

有些用户报告说游戏退出并回到飞溅状态。

我敢肯定,这是一个错误,但它的失败,所以我没有收到任何崩溃报告。

什么能导致它像这样默默地失败?以这样的方式,应用程序周期和用户看不到强制关闭窗口。

编辑:我已经通过在slapsh活动的清单中放置noHistory =“true”来停止启动画面重新启动。现在,用户只是报告说它会默默退出。什么会导致?!

EDIT2:如果它的任何线索,笔者近日从SDK R10到R16 SDK更新,我相信我已经删除了所有其他的变化,如果我能我会回去R10,但我不能找到一个办法。

编辑Jan 19:我发现了这个问题的根本原因。在某些时候,Google向SDK介绍了一个名为“png crush”的功能。并且PowerVR并不总是很高兴加载这些纹理。有关更多信息和解决方案,请参阅我的其他问题here

回答

1

It确实发生在我的应用程序中,通常在开发调试期间发生,通常是由于以下问题。

  • 由于使用VBO分配的内存太多,GPU进入内存不足状态。这通常取决于事实,并非总是正确地解除分配。当它发生时,以我卑微的经历,就好像托管应用程序的虚拟机死亡一样。遗憾的是,显然你无法检查你的用户的logcat。

问题是非常可变的,因为它取决于GPU类型和GPU可用的内存。 例如在我的galaxy选项卡上,它发生在我的基本摩托罗拉Defy之后(在装载水平和VBO方面)。

这在故障排除中造成了很多麻烦。

:)

+0

真的很有趣!看看有问题的设备,他们都是机器人和银河系的设备,它们都有一个共同/相似的GPU,[PowerVR](http://en.wikipedia.org/wiki/PowerVR#Series_5)SGX 540和新加坡证券交易所530.我将不胜感激你对VBOs和你的银河选项卡(我相信也有GPU)的任何建议和经验。为你的+100看起来不错! – weston 2012-01-06 18:25:26

3

如果没有源代码,很难分辨真正发生了什么。尝试在不同API级别的仿真器上进行调试,看看是否可以重现它。

如果你不能得到它的转载,我建议你看看ACRABugSense。使用这些第三方崩溃报告插件非常容易,您甚至可以手动报告无声异常。

+1

因为是OpenGL 2.0,仿真器不可能出现问题。不过谢谢,我现在已经推出了一个bugsense的版本。但是鉴于我的用户甚至没有看到正常的强制关闭对话框,我不希望这将能够抓住它。 – weston 2011-12-31 13:01:20

+0

ACRA更适用于自定义报告,并特别报告不强制关闭应用程序的无提示异常。我不确定BugSense是否可以捕获这些数据。 – Kimi 2011-12-31 13:10:30

+0

是的,bugsense不好,我在opengl线程中测试了一个异常,事情就这样冻结了。似乎只从UI线程报告。将看看ACRA。 – weston 2011-12-31 15:01:32

0

只有重写默认异常行为的方法 - UncaughtExceptionHandler。您可以创建自己的类ExceptionHandler implements UncaughtExceptionHandler,并根据需要使用异常 - 将其发送给远程服务器或其他人。要注册它,你应该创建Application类:

public class YourApplication extends Application { 
@Override 
public void onCreate() { 
    super.onCreate(); 
    Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this.getApplicationContext())); 
    } 
} 

,并在您的清单文件

<application 
    android:name="your.package.name.YourApplication" 
    ... > 
     ... 
</application> 
+0

谢谢,但我很确定没有异常被抛出,否则用户会看到强制关闭消息框。 – weston 2012-01-05 12:12:49

2

注册此类您是否使用了一些本地代码?因为如果存在段错误,它会将堆栈跟踪打印到logcat,但不会创建Uncought异常(所以在这种情况下,像ACRA这样的插件是无用的,即使我可以大量推荐ACRA)

+0

有趣的是,什么分类为本机代码,我调用OpenGl 2代码可能会导致此段错误? – weston 2012-01-05 12:11:28

+0

原生代码将与您的游戏使用的Android-NDK一起编译为C源代码。但如果你问它是什么,你可能没有使用它;-) – Force 2012-01-05 13:16:49