在安卓设备上使用Unity恢复应用程序

7
我正在尝试使用OnApplicationPause函数在Unity中实现暂停功能。 当我按下home按钮退出游戏(在Android上)并通过活动应用列表回来时,它似乎工作正常,但是当我在主屏幕上按下游戏图标时,它会重新启动游戏而不是将我带回原来的界面。 有什么解决办法吗?
5个回答

7

当我在日志中看到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


将这个 intent-filter 移动到其他位置后,我的问题也解决了!虽然我不知道为什么,但这已经不重要了! - p.streef
注意 - 这对我有效,但移动意图过滤器会产生一些不良影响。如果现有用户将其固定到主页,则我的游戏的图标将丢失,并且有时(我不确定情况)该图标将从启动器中完全消失。 - tenpn

0
在我的经验中,当您的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。

0

这可能是因为我的项目中有两个场景吗? - tvoloshyn
不,那不应该是个问题。一个可能性是当您的应用程序恢复时出现了错误,这就是为什么它重新启动的原因。您可能想像@Enzign的回答中那样检查logcat。 - Yuandra Ismiraldi

0

你检查过 Android Manifest 中的启动模式了吗?将值设置为 android:launchMode="singleTask"。


0

你尝试过在将应用程序导出为Android gradle项目时操纵其生命周期吗?

你可以这样做(在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();
        }
    }

我对此没有经验,但想向您展示可能性 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接