【发布时间】:2020-04-05 14:39:48
【问题描述】:
我有一个使用 Cardboard SDK 构建并导出为 Android 库的 Unity 场景。该库用于在 Android 应用上以纸板模式播放视频。它不是整个应用程序,而是其中的一部分。 android 应用程序的其余部分是使用 Kotlin 和 Java 构建的。
我已经实现了,所有功能都按预期工作,但是,退出场景会使 android 崩溃。
我们尝试了各种方法来清除玩家偏好,甚至在关闭场景之前清除内存。但是在android上它总是崩溃。我有两部带有 android 9 和 10 的 android 手机用于测试。
在 android 应用程序中,我已经做到了,一旦应用程序崩溃,我就会尝试恢复。我的崩溃是一些lateinit var 变量被破坏了。它们的值变为 null 并且恢复先前的活动会使它崩溃。因此,在我退出统一场景后,我将取消引用的变量加载回内存中,一切都会再次运行。
注意:我尝试过统一使用
Application.Quit();,但它只是关闭了整个应用程序。另一方面,我只想关闭正在运行的场景
统一[我在android部分调用函数goBack来关闭应用]:
public void GoToHome()
{
Pause();
Stop();
Resources.UnloadUnusedAssets();
PlayerPrefs.DeleteAll();
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("goBack");
}
应用内:
public void goBack()
{
UnityPlayer.currentActivity.finish();
finish();
loadDerereferencedVars();
}
这在android 9上完美。在另一部android 10的手机上,我关闭场景后,应用程序继续运行,但是,有一条消息
当我点击关闭应用程序时,应用程序继续工作。
我检查了日志,null pointer dereference 导致 Unity Main >... 崩溃的原因
If you'd like to see the Unity Crash Log from LogCat in Android Studio
所以,既然应用程序仍在运行,我想,最好隐藏崩溃报告,让用户不知道这次崩溃,但仍然报告它。
我尝试将我的应用程序包含在 Application 中,并添加了一个捕获 uncaughtException 的方法。
这是我的应用程序类:
public class MyApp extends Application {
private static final String TAG = "MyAPP";
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException (Thread thread, Throwable e) {
handleUncaughtException (thread, e);
}
});
}
/**
* Handles Uncaught Exceptions
*/
private void handleUncaughtException (Thread thread, Throwable e) {
// The following shows what I'd like, though it won't work like this.
Toast.makeText(getApplicationContext(), "Looks like I am having a bad day!", Toast.LENGTH_LONG).show();
Log.e("UncaughtException", "I found an exception!");
// Add some code logic if needed based on your requirement
}
}
同样,这在 Android 9 中完美运行,我也收到了错误报告。但是在安卓 10 的手机中,我只是得到了如上图的崩溃报告,没有报错。
我想知道为什么崩溃处理不起作用以及如何修复它?
【问题讨论】:
-
为什么要投反对票?是不是我没有提供足够的细节?
-
我认为也没有必要投反对票。不知道做这件事的人在想什么¯_(ツ)_/¯
标签: java android unity3d google-cardboard uncaught-exception