mainActivity在androidmanifest.xml中有一个属性android:launchMode="singleInstance"
以下是mainActivity中的onCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.i(TAG,  "onCreate() from MainActivity");

    session = new TempSession(this);

    // check if logged in. If not, take the user back to login activity.
    session.checkLogin(); // <---- HERE

    Toast.makeText(this, "logged in as " + session.getUsername(), Toast.LENGTH_SHORT).show();

    // Prevents screen from turning off when in this Activity.
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    ....

而tempsession,它检查用户是否登录,如果没有,它将把用户带到loginactivity。
这是checkLogin()方法
public void checkLogin(){
    // Check login status
    if(!this.isLoggedIn() || getUsername() == null) {
        // user is not logged in redirect him to Login Activity
        Intent i = new Intent(context, LoginActivity.class);

        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

        // Add new Flag to start new Activity
        i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

        // Staring Login Activity
        context.startActivity(i);
    }
}

据我所知,当mainActivity调用checkLogin()时,我在这里标记了目前,我的应用程序会打开loginActivity,但仍会继续执行下一条指令(例如,让Toast说“登录为空”,并在后台继续执行),并调用onPause()->onStop()。
有没有办法阻止主要活动继续进行?
这种情况会导致从loginactivity返回到mainactivity。
如果你需要更多的信息请告诉我。
提前谢谢你。

最佳答案

有什么方法可以阻止MainActivity继续在那一点上运行吗?
对。havecheckLogin()返回一些值,指示MainActivity#onCreate(...)应该return而不是继续。
调用startActivity(...)不会启动活动。把它想象成要求android框架启动一个活动。它将此作业放在ui线程工作队列的末尾。这意味着在启动新活动之前,它将完成已在工作队列中的任何其他作业,包括当前方法的其余部分,以及当前活动的其他生命周期方法。

关于java - Activity 中的onCreate会忽略所有调用堆栈序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32534090/

10-13 01:11