【发布时间】:2014-02-18 23:13:46
【问题描述】:
我正在尝试使用 OnApplicationPause 函数在 Unity 中实现暂停。
当我通过按主页按钮退出我的游戏(在 Android 上)然后通过活动应用程序列表返回时,它似乎工作正常,但是当我按主屏幕上的游戏图标时,它重新启动游戏而不是让我回来.
有没有办法解决这个问题?
【问题讨论】:
我正在尝试使用 OnApplicationPause 函数在 Unity 中实现暂停。
当我通过按主页按钮退出我的游戏(在 Android 上)然后通过活动应用程序列表返回时,它似乎工作正常,但是当我按主屏幕上的游戏图标时,它重新启动游戏而不是让我回来.
有没有办法解决这个问题?
【问题讨论】:
对我来说,当我在日志中有一个:android.os.DeadObjectException 时,就会发生这种情况。 (意味着应用程序已经死了)。
检查您的日志中是否有类似的内容:
I/ActivityManager( 600): Restarting because process died: ActivityRecord{439f9588 u0 com.mycompany.myapp/com.unity3d.player.UnityPlayerProxyActivity}
W/ActivityManager( 600): Exception when starting activity com.mycompany.myapp/com.unity3d.player.UnityPlayerProxyActivity
W/ActivityManager( 600): android.os.DeadObjectException
W/ActivityManager( 600): at android.os.BinderProxy.transact(Native Method)
W/ActivityManager( 600): at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:759)
W/ActivityManager( 600): at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:1120)
W/ActivityManager( 600): at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:1247)
...如果是这样,请在您的日志中进一步回顾一下,看看您的应用为何会死机。 为了让应用程序不死,我不得不移动意图过滤器:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
从 UnityPlayerProxyActivity 到 UnityPlayerNativeActivity
【讨论】:
它应该在您返回游戏时恢复。如果没有,那么可能是您的游戏流程在暂停恢复后自动重新启动。
在您的游戏中,尝试检查 OnApplicationPause 的状态并从那里进行调试。代码示例在这个线程http://answers.unity3d.com/questions/286939/detecting-when-applicationdidbecomeactive-in-unity.html
【讨论】:
根据我的经验,当您的 AndroidManifest.xml 文件中没有所有正确的信息时,就会发生这些奇怪的事情。特别是这一行:
<activity android:name="your_name_here.Activity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:screenOrientation="your_orientation_here_if_needed">
确保“android:configChanges”包含这里的所有内容。 否则,要为您提供更具体的信息,您需要提供有关何时发生这种情况的 logcat。
【讨论】:
你有没有检查过 android manifest 上的启动模式,并将值设为 android:launchMode="singleTask"
【讨论】:
当您将应用导出为 Android gradle 项目时,您是否尝试过操纵其生命周期?
您可以通过在 File - Build Settings 中勾选 Export Project 并单击 Export 来执行此操作(在 Unity 2018.4.5 中,其他版本可能会有所不同) .例如,您可以在 Android Studio 中打开生成的 gradle 项目,应该会找到 UnityPlayerActivity 并出现以下情况:
// Pause
@Override protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
// Resume Unity
@Override protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
@Override protected void onStart()
{
super.onStart();
mUnityPlayer.start();
}
@Override protected void onStop()
{
super.onStop();
mUnityPlayer.stop();
}
// Low Memory Unity
@Override public void onLowMemory()
{
super.onLowMemory();
mUnityPlayer.lowMemory();
}
// Trim Memory Unity
@Override public void onTrimMemory(int level)
{
super.onTrimMemory(level);
if (level == TRIM_MEMORY_RUNNING_CRITICAL)
{
mUnityPlayer.lowMemory();
}
}
我没有这方面的经验,但想向您展示这种可能性:)
【讨论】: