Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何仅在重新启动应用程序时启动闪屏活动?_Android_Android Activity_Splash Screen - Fatal编程技术网

Android 如何仅在重新启动应用程序时启动闪屏活动?

Android 如何仅在重新启动应用程序时启动闪屏活动?,android,android-activity,splash-screen,Android,Android Activity,Splash Screen,我有一个splash活动,应该在家庭活动开始之前出现一段时间。这是我的代码: import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class SplashActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onC

我有一个splash活动,应该在家庭活动开始之前出现一段时间。这是我的代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SplashActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);



     /****** Create Thread that will sleep for 5 seconds *************/        
    Thread background = new Thread() {
        public void run() {

            try {
                // Thread will sleep for 2.5 seconds
                sleep(2500);



                //Remove activity
                finish();

                // After 2.5 seconds redirect to another intent
                Intent i=new Intent(getBaseContext(),HomeActivity.class);
                startActivity(i);

            } catch (Exception e) {

            }
        }
    };

    // start thread
    background.start();


}

@Override
protected void onDestroy() {

    super.onDestroy();

  }
}


目前,这一切都很好,除了当我返回主屏幕而没有明确关闭应用程序并继续运行时,它会再次显示初始屏幕。如何确保仅在重新启动应用程序时才显示启动屏幕?

我建议您在SplashActivity的onCreate方法中保存包含当前时间戳的首选项。
下次打开应用程序时,请检查保存的时间戳和当前时间戳之间的差异是否大于任意值(一种宽限期),并决定显示/避免启动屏幕。

我建议您将包含当前时间戳的首选项保存在SplashActivity的onCreate方法中。
下次打开应用程序时,请检查保存的时间戳和当前时间戳之间的差异是否大于任意值(一种宽限期),并决定显示/避免启动屏幕。

在清单中使用noHistory和excludeFromRecent属性。此外,将标志Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP添加到用于启动实际活动的意图中


编辑:将android:launchMode=singleTop放在真正的主活动中,并将intent标志与其他标志\u activity\u NEW\u任务结合使用。

在清单中使用noHistory和excludeFromRecent属性。此外,将标志Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP添加到用于启动实际活动的意图中


编辑:将android:launchMode=singleTop放在真正的主活动中,并将intent标志与其他标志\u activity\u NEW\u任务结合使用。

这有点不清楚。如果活动已被销毁,用户按“上一步”或操作系统显式销毁应用程序,则应用程序将从主页重新启动。或者,如果用户按下home(主页)按钮或接到电话,应用程序将恢复。请指定“以全新方式启动应用程序”的含义。如果您的意思是每次创建新实例时,我的答案都会按照您的预期工作。我的意思是,如果当前没有应用程序实例正在运行,我希望显示启动屏幕。进入应用程序后,如果我按home按钮,然后单击应用程序图标,我不希望显示初始屏幕,因为现有的应用程序实例已经在运行。这有点不清楚。如果活动已被销毁,用户按“上一步”或操作系统显式销毁应用程序,则应用程序将从主页重新启动。或者,如果用户按下home(主页)按钮或接到电话,应用程序将恢复。请指定“以全新方式启动应用程序”的含义。如果您的意思是每次创建新实例时,我的答案都会按照您的预期工作。我的意思是,如果当前没有应用程序实例正在运行,我希望显示启动屏幕。进入应用程序后,如果我按home按钮,然后单击应用程序图标,我不希望显示初始屏幕,因为现有的应用程序实例可能已经在运行。如果我从homeactivity转到其他活动,返回home活动,转到home屏幕并单击应用程序图标,这会起作用,但如果我在homeactivity中按home按钮,然后单击应用程序图标,则不起作用。你能根据我在这里给出的描述修改你的答案吗?仍然不完全是我想要的行为:如果我从homeactivity转到其他活动,回到home activity,转到home屏幕并单击应用程序图标,这会起作用,但如果我从homeactivity按home按钮,则不起作用,然后单击应用程序图标。你能根据我在这里给出的描述修改你的答案吗?仍然不是我想要的行为: