[英]onCreate in an Activity ignores all the call stack sequence
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中标记<---- HERE的地方,当它调用checkLogin()时,难道它不应该在完成之前完成所有任务吗?
当前,我的应用程序将打开LoginActivity,但仍继续执行下一条指令(例如,使Toast说“以null登录”,并继续在后台运行 )并调用onPause()-> onStop()。
有什么办法可以阻止MainActivity继续运行吗?
这种情况导致从LoginActivity旁路回退到 MainActivity 。
如果您需要更多信息,请与我们联系。
先感谢您。
有什么办法可以阻止
MainActivity
继续运行吗?
是。 让checkLogin()
返回一些值,该值指示MainActivity#onCreate(...)
应该return
而不是继续执行。
调用startActivity(...)
不会启动活动。 将其视为要求Android框架开始活动。 它将此作业放置在UI线程的工作队列的末尾。 这意味着在开始新活动之前,它将完成工作队列中已经存在的所有其他作业,包括当前方法的其余部分以及当前活动的其他生命周期方法。
您的吐司仍然显示出来的原因是,仅开始一项新活动并不会破坏您的旧活动。 它只是被推到了后台。 当然,您可以使用清单中的android:launchMode
属性更改此设置。 一个简单的策略可能是在用户登录后从checkLogin()方法简单地返回true,并按如下所示更改onCreate:
if( session.checkLogin() ) {
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);
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.