1

在使用给定流程在 Android 设备中安装应用程序时,我发现 Android 应用程序存在非常奇怪的错误。

  1. 从 playstore(旧版本)安装应用程序。

  2. 启动了应用程序(现在我在 HomeScreen,.ie,HomeActivity)。

  3. 现在,我通过安装最新版本升级了应用程序(在生产版本中,尚未发布到 Playstore)。

  4. 单击启动器图标,等待主屏幕可见,然后按菜单按钮将应用程序保持在后台。

  5. 现在,通过单击启动器图标启动应用程序。

在这种情况下,Splash Screen( Activity) 会启动,然后将我带到主屏幕。在日志中,呼叫转到onStop()HomeActivity。这意味着 Activity 不会被破坏。因此,当我单击启动器图标时,它应该恢复 HomeActivity,而不是重新创建 splashActivity。但是当我从后台启动应用程序时,活动恢复并且没有显示初始屏幕。这是正确的行为吗?如果是这样,那么我没有得到回调到onDestroy().

以下是我在清单中的活动代码:

 <activity
            android:name="com.app.ui.HomeActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustNothing">

        </activity>

        <activity
            android:name="com.app.ui.SplashActivity"
            android:label="@string/app_name"
            android:screenOrientation="sensorPortrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

我没有将任何启动模式设置为SplashActivity. 一段时间后,它变得正确并且不显示启动画面。

此外,当我从后台启动应用程序或按下后退按钮然后单击应用程序图标时,不会重现此错误。仅当我单击启动器图标时才会发生这种情况,将应用程序保持在后台,一段时间后,它就会变得正确。

此外,当我安装应用程序而不更新时,也没有出现此问题。只有当我更新 apk 时,才会发生这种情况

为什么会在初始启动时发生这种情况..它是 android 中的错误..?如果是这样,如何避免这个问题..

4

1 回答 1

0

该应用程序在后台运行一段时间后关闭的原因是您设备的内核正在终止该进程,以便在其位置运行更多进程。我假设您在应用程序在后台运行时访问其他应用程序,这就是它被杀死的原因(因此跳过了 Android 生命周期中的 onDestroy() 调用!)。

从 Android Developer's guide to Activity Lifecycle for onDestroy() 的文档中:

注意:不要指望这个方法被称为保存数据的地方!例如,如果一个活动正在内容提供者中编辑数据,那么这些编辑应该在 onPause() 或 onSaveInstanceState(Bundle) 中提交,而不是在这里。此方法通常用于释放资源,例如与活动相关联的线程,以便被破坏的活动不会在其应用程序的其余部分仍在运行时留下这些东西。在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情

链接到文档

于 2015-06-02T07:31:34.453 回答