我在Android应用程序中遇到了奇怪的问题。每当我完成活动甚至强制关闭应用程序时,它都会重新启动。
以下是申请流程:
应用程序以Splash屏幕打开,这是一项活动,然后转到主要活动,其中内容显示在片段中。现在,当我在背面按下完成主要活动时,应用程序重新启动而不是关闭。
我这样开始MainActivity
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
并且在MainActivity
我正在完成它
MainActivity.this.finish();
并退出此类应用程序
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
如何解决此问题?
由于
答案 0 :(得分:1)
您应该使用标记
启动MainActivityIntent launchNextActivity;
launchNextActivity = new Intent(B.class, A.class);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(launchNextActivity);
现在,在你想要实现onBackPressed以关闭应用程序的MainActivity中,你可能会做这样的事情,
private Boolean exit = false;
@Override
public void onBackPressed() {
if (exit) {
finish(); // finish activity
} else {
Toast.makeText(this, "Press Back again to Exit.",
Toast.LENGTH_SHORT).show();
exit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
exit = false;
}
}, 3 * 1000);
}
}
现在,当您按下后退按钮时,它会向“按下增益退出”进行祝酒,如果用户在3秒内按下后退按钮,应用程序将退出
答案 1 :(得分:1)
开始MainActivity
致电finish()
后,这将解决您的问题。
在SplashActivity.java
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
您无需在MainActivity
答案 2 :(得分:1)
不要这样做:
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
没有必要杀死这个过程。如果想要,Android会这样做。这就是您的应用重启的原因。 Android认为它已崩溃,并正在为用户重新启动它。
答案 3 :(得分:0)
在您的主要活动中。
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
finish();
break;
}
return (super.onOptionsItemSelected(item));
}
答案 4 :(得分:0)
Buddy你的代码是
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
MainActivity.this.finish();
您的代码的错误在于您首先打开MainActivity,一旦打开它,您就会在下一行中关闭它。
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
finish(); // or write this as SplashActivity.this.finish();
这段代码将完成您当前的活动,即SplashActivity,MainActivity将保持活动状态。祝你好运。
答案 5 :(得分:0)
@MukeshJha问题是你没有完成你的第一个活动,即SplashActivity
所以当你开始MainActivity
然后你正在完成你的MainActivity
时,它仍然处于停止状态的堆栈中导致从停止状态重新启动先前的SplashActivity
。
为了避免再次重启SplashActivity
,您需要在开始新活动时完成它。
解决方案是以这种方式启动MainActivity,
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
finish(); // this will cause to finish SplashActivity.