Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-登录和重新登录_Android_Android Activity_Login_Android Intent - Fatal编程技术网

Android-登录和重新登录

Android-登录和重新登录,android,android-activity,login,android-intent,Android,Android Activity,Login,Android Intent,在我的活动中,我有一个登录页面(L),它指向活动的层次结构(L->A->B->C)。当用户登录并进入活动C时,他将最小化他的应用程序,一段时间后,系统将在此应用程序上强制关闭 现在,当他再次启动这个应用程序a登录时,他应该看到,上次应用程序运行时,堆栈上所有打开的活动都在哪里(如果他在C中,一个后退按钮指向B,然后指向a,然后指向L)。如何在Android中实现这种行为?我现在使用的是SharedReference,它是一系列访问过的活动,然后是一些标志,它告诉我一个应用程序是在系统关闭还是用户

在我的活动中,我有一个登录页面(L),它指向活动的层次结构(L->A->B->C)。当用户登录并进入活动C时,他将最小化他的应用程序,一段时间后,系统将在此应用程序上强制关闭

现在,当他再次启动这个应用程序a登录时,他应该看到,上次应用程序运行时,堆栈上所有打开的活动都在哪里(如果他在C中,一个后退按钮指向B,然后指向a,然后指向L)。如何在Android中实现这种行为?我现在使用的是SharedReference,它是一系列访问过的活动,然后是一些标志,它告诉我一个应用程序是在系统关闭还是用户关闭的情况下完成的,我用它自己的SharedReference持久化每个活动。如果系统关闭我的应用程序,在登录后,我会在For cycle中打开过去打开的一系列活动,但它们仅在堆栈上。只有当我使用“后退”按钮查看它们时,才会打开它们(=运行onCreate方法)

你认为有更干净的方法吗


谢谢

当我想在强制关闭后维护层次结构时,我会绕过活动堆栈,将每个活动替换为它调用的活动,然后覆盖back事件以反向执行相同的操作

在ActivityL.java中,您要转到ActivityA的位置:

Intent intent = new Intent(getApplicationContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
@Override
public void onBackPressed () {
    Intent intent = new Intent(getApplicationContext(), ActivityL.class)
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
}
现在堆栈上只有一个活动-ActivityA。要使“后退”按钮正常工作并返回ActivityL,请将以下内容添加到ActivityA:

Intent intent = new Intent(getApplicationContext(), ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
@Override
public void onBackPressed () {
    Intent intent = new Intent(getApplicationContext(), ActivityL.class)
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
}
您仍然需要存储足够的状态信息,以便返回强制关闭前用户所在的活动。在onCreate for ActivityL中,检查状态信息以确定您希望用户处于哪个视图上,并使用类似于上面第一个块的代码直接进入该视图


对我来说,这似乎比在启动时重建整个活动堆栈要干净一些。但是,如果您的活动不遵循严格的层次结构,这会变得更加复杂。(即,有时活动A启动活动B,有时它启动活动C)。

谢谢,但这意味着堆栈上只剩下一个活动,这对我来说是不合适的。我可以问一下原因吗?从这个解决方案的角度来看,堆栈只是一个实现细节。我用这种方法维护一个任意大小的“虚拟”堆栈,用户体验与标准活动堆栈上有多个打开的活动是无法区分的。是的,但这对我来说是不合适的,因为我将有相当繁重的业务应用程序。我认为,这对于较小的应用程序是有用的