gpt4 book ai didi

java - 主要 Activity 在启动屏幕返回之前被破坏

转载 作者:行者123 更新时间:2023-12-02 03:57:37 26 4
gpt4 key购买 nike

我有一个主 Activity ,我在其中调用启动屏幕 Intent ,该 Activity 会在 3 秒后自行销毁,但在启动屏幕 Intent 的生命周期之间,主 Activity 也会自行销毁(这是错误的!).. 所以当启动屏幕时 Intent 完成,应用程序崩溃,因为主 Activity 本身已被销毁。

如果有人能帮助我解决这个问题,我真的很感激,我现在​​真的没有想法。

这是我的代码:

MainActivity.java

public class MainActivity extends Activity {

private WebView webview;

public MainActivity() {

}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
log.debug("onCreate(): " + savedInstanceState);
MyApplication.startSomeMobileCore(this);
MyApplication.startSomeMobileNotifier(this);

setContentView(R.layout.main);
this.onNewIntent(this.getIntent());
}

@Override
protected void onStart() {
log.debug("onStart()");
super.onStart();
}

@Override
protected void onRestart() {
super.onRestart();
this.wasRestarted = true;
}

@Override
protected void onResume() {
super.onResume();
}

protected void onPause() {
super.onPause();
this.receivedIntent = false;
}

protected void onStop() {
super.onStop();
this.receivedIntent = false;
}

public void onDestroy() {
super.onDestroy();
}

@Override
public void onNewIntent(Intent intent) {
log.debug("onNewIntent(): " + intent);
super.onNewIntent(intent);

if(intent == null) {
log.warn("Received null intent, will ignore");
}

if ("OK".equals(authCode)) {
if (intent != null && intent.getData() != null &&
("content".equals(intent.getData().getScheme()) ||
"http".equals(intent.getData().getScheme()))) {
log.debug("intent.getData() :" + intent.getData() + "; intent.getData().getScheme() : " + intent.getData().getScheme());
String requestedPath;
if ("http".equals(intent.getData().getScheme())) {
requestedPath = URLDecoder.decode(intent.getData().toString());
} else {
requestedPath = intent.getData().getPath();
}
showResource(requestedPath);
} else {
log.debug("Intent without data -> go to entry page after splash screen");
showResource(Configuration.properties.getProperty("PORTAL"));
}
} else {
Intent errorIntent = new Intent(this, ErrorIntent.class);
startActivity(errorIntent);
// finish actual activity
finish();
}

log.debug("Show splash screen");
Intent intentSplash = new Intent(this, SplashIntent.class);
startActivity(intentSplash);
}

void showResource(String resourceToShow) {
webview = (WebView)findViewById(R.id.browser);
webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webview.setWebViewClient(new WebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.loadUrl(resourceToShow);
}
}

}

这是我的 SplashIntent.java

public class SplashIntent extends Activity {
// Time splash screen should be shown (in ms)
private static final int splashTime = 3000;
static Logger log = Logger.getLogger(SplashIntent.class);

@Override
public void onCreate(final Bundle savedInstanceState) {
log.debug("SplashIntent: onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
log.debug("SplashIntent: killing splash");
finish();
}
}, splashTime);

}
}

这是一个 part of logcat

最佳答案

似乎没有任何理由重写 MainActivity 中的 onNewInent。

在 onCreate() 方法中使用以下内容:

if(savedInstanceState == null){
Intent splashIntent = new Intent(this, SplashIntent.class);
startActivity(splashIntent);
}

每当 MainActivity 在没有保存状态的情况下初始化时,这将启动启动屏幕。由于您的 SplashIntent Activity 在完成后调用 finish ,因此它应该恢复到堆栈中的最后一个 Activity (也称为您的 MainActivity)。

<小时/>

更好的方法是使用 SplashIntent Activity 作为启动器 Activity ,然后使用 Intent 将用户转发到 MainActivity。

非常简单的例子是:

public class SplashIntent extends Activity {

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

log.debug("SplashIntent: onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
log.debug("SplashIntent: killing splash");
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}, splashTime);
}
}

关于java - 主要 Activity 在启动屏幕返回之前被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279821/

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