gpt4 book ai didi

java - 为什么每次更改启动屏幕时我的应用程序都会从​​后台打开?

转载 作者:行者123 更新时间:2023-12-02 01:21:02 25 4
gpt4 key购买 nike

我创建了一个带有 3 个启动画面的应用程序。它们在 10 秒后出现并消失,下一个会取代它的位置,直到第三个结束,然后主 Activity 打开,应用程序按预期运行。

问题是,如果用户在任何这些启动屏幕期间将应用程序发送到后台,则 10 秒后,即使用户正在使用另一个应用程序并显示下一个启动屏幕或下一个应用程序,应用程序也会将自己带回前台。主要 Activity 。

我查看了代码,似乎找不到任何可以解释这一点的内容。在Android Studio更新到3.5之前它工作正常,我不知道为什么会导致这个问题。

public class  loadScreen extends AppCompatActivity {
private int SLEEP_TIMER = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);



requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_load_screen);
LogoLauncher logoLauncher = new LogoLauncher();
logoLauncher.start();
}

private class LogoLauncher extends Thread{
public void run(){
try{
sleep(3000 * SLEEP_TIMER);
}catch(InterruptedException e)
{
e.printStackTrace();

}
Intent intent = new Intent(loadScreen.this, createdby.class);
startActivity(intent);
loadScreen.this.finish();


}
}

@Override
public void onBackPressed() {

}
}

我希望,如果应用程序在用户返回时在启动屏幕序列期间被发送到后台,它将从用户离开时的位置恢复。

最佳答案

您的问题是,即使您的应用程序位于后台,startActivity 也会被调用。这将在调用时打开您的应用程序。因此,您需要在该部分创建一些逻辑来检查是否允许调用 startActivity 方法。

编辑:用于检查 Activity 的待启动的代码。尝试一下!

private static final String PENDING_LAUNCH_KEY = "PENDING_LAUNCH";
private boolean pendingLaunch;
private boolean activityPaused;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (savedInstanceState != null) {
pendingLaunch = savedInstanceState.getBoolean(PENDING_LAUNCH_KEY);
}

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_load_screen);

if (!pendingLaunch) {
LogoLauncher logoLauncher = new LogoLauncher();
logoLauncher.start();
}
}

@Override
protected void onResume() {
activityPaused = false;

if (pendingLaunch) {
pendingLaunch = false;
startAndFinish();
}
}

@Override
protected void onPause() {
activityPaused = true;
}

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
outState.putBoolean(PENDING_LAUNCH_KEY, pendingLaunch);
super.onSaveInstanceState(outState, outPersistentState);
}

private class LogoLauncher extends Thread{
public void run(){
try{
sleep(3000 * SLEEP_TIMER);
}catch(InterruptedException e)
{
e.printStackTrace();
}
if (activityPaused) pendingLaunch = true;
else startAndFinish();
}
}

private void startAndFinish() {
Intent intent = new Intent(loadScreen.this, createdby.class);
startActivity(intent);
finish();
}

关于java - 为什么每次更改启动屏幕时我的应用程序都会从​​后台打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com