Android 循环以根据条件启动活动
我正在尝试编写一个android应用程序,它有两个主要活动:登录屏幕和显示屏幕。目前,我正在设置它,这样,如果用户已经登录,登录屏幕将被跳过 为了找到最好的方法,我创建了一个通用的“Main”活动,看起来像这样:Android 循环以根据条件启动活动,android,Android,我正在尝试编写一个android应用程序,它有两个主要活动:登录屏幕和显示屏幕。目前,我正在设置它,这样,如果用户已经登录,登录屏幕将被跳过 为了找到最好的方法,我创建了一个通用的“Main”活动,看起来像这样: public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { // Get preferences SharedPref
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
// Get preferences
SharedPreferences settings = getSharedPreferences("PREFERENCES", MODE_PRIVATE);
super.onCreate(savedInstanceState);
//setContentView(R.layout.viewusage);
//System.out.println(settings.getBoolean("LOGGEDIN", false));
if (settings.getBoolean("LOGGEDIN", false) == false)
{
Intent intent = new Intent(Main.this, Login.class);
startActivity(intent);
}
else
{
Intent intent = new Intent(Main.this, Display.class);
startActivity(intent);
}
}
}
其思想是,当某人成功登录时,登录活动将保存用户首选项所需的所有详细信息,然后完成()活动。这将返回到主要活动。我想做的是让主要活动在if中循环。。。当没有任何活动正在运行时,else语句:因此当登录页面关闭时,它将重新运行if。。。else语句,并应启动显示活动而不是登录活动。如果用户从Display类注销,则相反
我曾想过使用while(true)循环,但这只是挂起程序。我曾想过将它放在一个单独的线程中,但我不知道如何检测是否已经有另一个活动正在运行,因此一个单独的线程将继续循环并打开新的活动(我想,我没有尝试过)
有没有关于我如何解决这个问题的建议
谢谢。我对你的问题有点困惑,但我想你应该使用
startActivityForResult
而不是startActivity
。这将允许您从登录活动中返回true
/false
结果,以便在登录成功后启动显示活动。同样,对于您的显示
活动,如果用户注销,您将finish()
该活动
,并将“注销”结果返回给用户注销的Main
。我对您的问题有点困惑,但我认为您希望使用startActivityForResult
而不是startActivity
。这将允许您从登录活动中返回true
/false
结果,以便在登录成功后启动显示活动。类似地,对于您的Display
活动,如果用户注销,您将finish()
该活动
,并将“注销”结果返回给将用户注销的Main
。您不能通过循环进入onCreate
,因为在onCreate
返回之前,活动实际上不会启动
一种可能性是使用startActivityForResult
并安排登录和显示活动返回一个代码,指示是退出还是继续进行其他活动。然后,您将把逻辑放在onActivityResult
中,而不是在onCreate
中循环
另一种可能更干净的方法是设计显示活动,以便在用户注销时直接启动登录活动,反之亦然。这样,主活动可以在确定最初显示哪个活动后调用finish()
。您不能通过在onCreate
中循环来完成,因为在onCreate
返回之前,活动实际上不会启动
一种可能性是使用startActivityForResult
并安排登录和显示活动返回一个代码,指示是退出还是继续进行其他活动。然后,您将把逻辑放在onActivityResult
中,而不是在onCreate
中循环
另一种可能更干净的方法是设计显示活动,以便在用户注销时直接启动登录活动,反之亦然。这样,主活动就可以在确定最初显示哪个活动后调用finish()
。
编写一个登录类,在设置的时间间隔后(可能是使用isLoginStillValid()方法)为登录添加时间戳并使登录过期,然后将登录对象保存在OnRetainOnConfiguration状态下的软终止上。在onCreate中检索登录对象。如果适用于onDestroy()中的首选项,请保存登录字段。在OnRetainOnConfiguration状态中将标志isSavedInstanceState设置为true,并使用此设置确定是否需要写入onDestroy中的prefs。我知道这听起来很复杂,但这是一个可重用的模板
最后,在onCreate中,查找登录对象。检查登录是否已过期。如果是这样,发布一个GetLogin对话框。在每个认证呼叫中,在允许访问认证呼叫之前,检查登录是否已过期。如果登录已过期,请考虑再次发布GETLogin对话框。记住,自从应用程序出现在前台,时间可能已经过去了
最后,使用startActivityForResult启动GetLoginDialog,以便检索登录数据并使用新的时间戳更新登录对象
日航在我的头顶上
编写一个登录类,在设置的时间间隔后(可能是使用isLoginStillValid()方法)为登录添加时间戳并使登录过期,然后将登录对象保存在OnRetainOnConfiguration状态下的软终止上。在onCreate中检索登录对象。如果适用于onDestroy()中的首选项,请保存登录字段。在OnRetainOnConfiguration状态中将标志isSavedInstanceState设置为true,并使用此设置确定是否需要写入onDestroy中的prefs。我知道这听起来很复杂,但这是一个可重用的模板
最后,在onCreate中,查找登录对象。检查登录是否已过期。如果是这样,发布一个GetLogin对话框。在每个认证呼叫中,在允许访问认证呼叫之前,检查登录是否已过期。如果登录已过期,请考虑再次发布GETLogin对话框。记住,自从应用程序出现在前台,时间可能已经过去了
最后,发布