Android应用程序关闭并重新打开重新开始

Android应用程序关闭并重新打开重新开始,android,eclipse,android-activity,Android,Eclipse,Android Activity,我已经为android创建了一个简单的应用程序,它使用按钮来导航不同的活动。应用程序从第1页开始,你点击第2页或第3页的按钮等等,然后启动所需的活动,简单 当你点击HOME(主页)或退出应用程序时,我遇到的麻烦比问题更多,因为android不会立即关闭应用程序,它会记住你所在的页面,例如在活动2或3打开应用程序。我希望应用程序在关闭时再次返回到应用程序的开头,并在1时打开,我可以通过单击“上一步”返回到1,但这确实不是我想要的 我希望有人能读到这篇文章并理解,最简单的解决方案请您需要做的是利用活

我已经为android创建了一个简单的应用程序,它使用按钮来导航不同的活动。应用程序从第1页开始,你点击第2页或第3页的按钮等等,然后启动所需的活动,简单

当你点击HOME(主页)或退出应用程序时,我遇到的麻烦比问题更多,因为android不会立即关闭应用程序,它会记住你所在的页面,例如在活动2或3打开应用程序。我希望应用程序在关闭时再次返回到应用程序的开头,并在1时打开,我可以通过单击“上一步”返回到1,但这确实不是我想要的


我希望有人能读到这篇文章并理解,最简单的解决方案请

您需要做的是利用活动生命周期为您带来好处。当屏幕由于任何原因被隐藏时,将调用其onPause方法。再次显示时,将调用onResume。但是,即使在第一次显示新活动时也会调用onResume。另一个问题是在活动之间转换时调用onPause

因此,当上一个活动的onPause和onResume相继被调用时,您最终希望重新启动应用程序。试试这个课程,让你所有的活动都扩展这个而不是活动

public abstract class BaseActivity extends Activity {

    private static BaseActivity lastPausedActivity = null;

    @Override
    protected void onPause() {

        super.onPause();
        lastPausedActivity = this;
    }

    @Override
    protected void onResume() {

        super.onResume();
        if(this == lastPausedActivity) {
            lastPausedActivity = null;
            Intent intent = new Intent(this, FirstActivity.class);
            intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
            startActivity( intent );
        }
    }
}

我还没有测试过这段代码,所以可能需要一些调整,但逻辑应该是合理的。

您需要做的是利用活动生命周期为您带来好处。当屏幕由于任何原因被隐藏时,将调用其onPause方法。再次显示时,将调用onResume。但是,即使在第一次显示新活动时也会调用onResume。另一个问题是在活动之间转换时调用onPause

因此,当上一个活动的onPause和onResume相继被调用时,您最终希望重新启动应用程序。试试这个课程,让你所有的活动都扩展这个而不是活动

public abstract class BaseActivity extends Activity {

    private static BaseActivity lastPausedActivity = null;

    @Override
    protected void onPause() {

        super.onPause();
        lastPausedActivity = this;
    }

    @Override
    protected void onResume() {

        super.onResume();
        if(this == lastPausedActivity) {
            lastPausedActivity = null;
            Intent intent = new Intent(this, FirstActivity.class);
            intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
            startActivity( intent );
        }
    }
}

我还没有测试过这段代码,所以它可能需要一些调整,但是逻辑应该是合理的。

我创建了这个类,然后在其他类的代码中使用它,应用程序开始启动,但一旦我尝试转到另一个页面,它就会再次跳回第一个页面,然后似乎进入第一个页面第二个页面第一个页面的循环,等等,直到应用程序崩溃一个糟糕的选择。我认为这可能是独特的活动之间,但它可能不是。尝试保持活动而不是taskId注意,这通常是一个坏主意,但只是为了确保我的逻辑是正确的。我会更新我的代码。哦,我知道我错过了什么。lastPausedActivity需要在我们进入if检查后重置。这很完美,只是更改了程序中的代码,效果非常好,每次我使用home或其他选项“关闭”应用程序时,当我重新打开它时,它会返回到home。谢谢你的帮助和明确的指示很高兴帮助蒂姆。我很好奇,你是坚持使用getTaskId解决方案还是使用我上面的代码?如果你不愿意,我会和getTaskId再试一次,因为持有对某个活动的静态引用几乎总是一个坏主意。我创建了这个类,然后在其他类的代码中使用它,应用程序开始启动,但一旦我尝试转到另一个页面,它就会再次跳回第一个页面,然后似乎进入第一页第二页第一页等的循环应用程序崩溃可能是个糟糕的选择。我认为这可能是独特的活动之间,但它可能不是。尝试保持活动而不是taskId注意,这通常是一个坏主意,但只是为了确保我的逻辑是正确的。我会更新我的代码。哦,我知道我错过了什么。lastPausedActivity需要在我们进入if检查后重置。这很完美,只是更改了程序中的代码,效果非常好,每次我使用home或其他选项“关闭”应用程序时,当我重新打开它时,它会返回到home。谢谢你的帮助和明确的指示很高兴帮助蒂姆。我很好奇,你是坚持使用getTaskId解决方案还是使用我上面的代码?如果您没有,我会再次尝试使用getTaskId,因为保持对活动的静态引用几乎总是一个坏主意。