完成主要活动会导致android应用程序重新启动

时间:2016-08-24 07:28:18

标签: android android-fragments android-activity

我在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);

如何解决此问题?

由于

6 个答案:

答案 0 :(得分:1)

您应该使用标记

启动MainActivity
Intent 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.