Android 循环以根据条件启动活动

Android 循环以根据条件启动活动,android,Android,我正在尝试编写一个android应用程序,它有两个主要活动:登录屏幕和显示屏幕。目前,我正在设置它,这样,如果用户已经登录,登录屏幕将被跳过 为了找到最好的方法,我创建了一个通用的“Main”活动,看起来像这样: public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { // Get preferences SharedPref

我正在尝试编写一个android应用程序,它有两个主要活动:登录屏幕和显示屏幕。目前,我正在设置它,这样,如果用户已经登录,登录屏幕将被跳过

为了找到最好的方法,我创建了一个通用的“Main”活动,看起来像这样:

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对话框。记住,自从应用程序出现在前台,时间可能已经过去了

最后,发布