当点击启动器图标启动应用程序时,将调用Launcher活动的onCreate()

时间:2015-06-02 07:18:22

标签: android splash-screen launcher android-launcher launchmode

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

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

  2. 推出应用程序(现在我在HomeScreen中,.i.e。,HomeActivity)。

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

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

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

  6. 在这种情况下,启动启动画面(Activity),然后将我带到主屏幕。在日志中,呼叫转到HomeActivity的onStop()。这意味着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中的一个错误..?如果是这样,如何避免这个问题..

1 个答案:

答案 0 :(得分:0)

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

从Android Developer指南到onDestroy()的Activity Lifecycle的文档:

  

注意:不要指望将此方法称为保存数据的地方!例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处。通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西。 在某些情况下,系统会简单地杀死活动的托管过程,而不会在其中调用此方法(或任何其他方法),因此不应该将其用于执行过程消失后要保留的内容

Link to documentation