收集应用程序内存后重新启动时启动画面未重新启动

Posted

技术标签:

【中文标题】收集应用程序内存后重新启动时启动画面未重新启动【英文标题】:Splash screen not relaunching when relaunching after Application memory collected 【发布时间】:2015-09-16 20:38:40 【问题描述】:

所以一般来说,启动屏幕活动的常用方法是这样的:

public class SplashActivity extends Activity
    @override
    protected void onResume() 
    //Create a thread
     new Thread(new Runnable() 
            public void run() 
                //Do heavy work in background
                ((MyApplication)getApplication()).loadFromDb();
                startActivity(new Intent(SplashActivity.this,     MainActivity.class));
                finish(); //End this activity
            
        ).start();
    

我在这种情况下发现的问题是,当应用程序在后台并收集内存时,当您将其返回到前台 Application.onCreate 再次调用时,不会调用 Splash 活动,而是调用任何当应用程序进入后台打开时,活动已打开。您如何确保在这种情况下启动 SplashScreen?

Edit1:顺便说一句,我尝试为 Splash Screen Activity 设置 android:clearTaskOnLaunch="true",但这似乎没有任何作用。

【问题讨论】:

在清单中注册您自己的应用程序实例: 在您的应用程序实例的 oncreate 中启动您的启动画面? @d3n13d1 但是这将如何与 MAIN/LAUNCHER 活动一起发挥作用......目前我将 SplashScreen 活动标记为这样。 【参考方案1】:

所以我想出了一个可行的解决方案:

扩展Application 类,在Application 的onStart 中添加一个布尔字段isSplashInitialized 并将其设置为false。然后在 Splash Activity 中完成初始化工作后,在调用 finish() 之前,将 Application 的 isSplashInitialized 字段设置为 true。 然后有一个您的所有活动都扩展的BaseActivity 类。在其中扩展 onCreate() 并在调用 super.onCreate(); 之后执行以下操作:

if (!(this instanceof SplashActivity) && !MyApplication.getIntance().isSplashInitialized()) 
    Intent intent = new Intent(this, SplashActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();

【讨论】:

以上是关于收集应用程序内存后重新启动时启动画面未重新启动的主要内容,如果未能解决你的问题,请参考以下文章

使用相机功能时,Flutter 应用程序崩溃并从启动画面重新启动

前台服务已终止且未重新启动

重新启动后,按钮单击时,小组件onUpdate未设置pendingIntent

Unity - 单击重新启动按钮后如何重新启动乐谱?

从后台运行应用程序时重新启动应用程序时出现闪屏问题

如何避免在后台运行时启动应用程序时显示启动画面?