在Android中我有一些活动,比方说A,B,C.
在A中,我使用此代码打开B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在B中,我使用此代码打开C:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
当用户点击C中的按钮时,我想返回A并清除后栈(关闭B和C).因此,当用户使用后退按钮B和C将不会显示时,我一直在尝试以下内容:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但是当我回到活动A时,如果我使用后退按钮,B和C仍然会出现.我怎么能避免这种情况?
当我点击我的个人资料活动中的退出按钮时,我想将用户带到登录页面,他需要使用新的凭据.
因此我使用了这段代码:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在" onButtonClick注销"按钮中.
但问题是,当我点击登录活动上的设备后退按钮时,它会将我带到ProfileActivity.当我按下LoginActivity上的设备后退按钮时,我希望应用程序关闭.
我究竟做错了什么?
我还在LoginActivityandroid:launchMode="singleTop"的清单中添加了
谢谢
我想结合两个意图标志,就像我们在android中所做的那样
Intent intent = new Intent(this, MapsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情,但它对我不起作用
val intent = Intent(context, MapActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
Run Code Online (Sandbox Code Playgroud) 我希望我的Android应用程序的用户在按某个活动时退出我的应用程序.可以这样做吗?
我正在编写一个有两种"模式"的应用程序; 一种视图模式和一种编辑模式.该应用程序公开了两个主要/启动器活动(比如A和D),这些活动又有自己的活动链(分别为B,C和E,F).两个入口点活动A和D将在主屏幕中显示两个带有单独标签的图标,并且两个链从不交叉,即一旦您在具有活动A的查看模式下启动应用程序,您可以来回走动的唯一路线是A,B,C,如果您在具有活动D的编辑模式下启动应用程序,则唯一可用的活动链是D,E,F.
现在,我的问题是如果启动应用程序,例如查看模式(活动链A,B,C)并按下该链中任何活动的主页按钮,我会回到主屏幕(当然)但是如果我那么在编辑模式下重新启动应用程序(活动链D,E,F)我按下主页按钮(即错误链中的活动)时进入我正在进行的活动 - 而不是编辑模式的预期入口点; 活动d.
我该如何解决这个问题?
我曾尝试各种组合android:noHistory,android:clearTaskOnLaunch和其他属性在AndroidManifest.xml为参与活动.但它们似乎只影响了活动,而不是整个链条.
当我按下Home按钮时,我想从历史堆栈中删除整个活动链(A,B,C或D,E,F)但是当我还在链中时仍然保持堆栈完整(我想要能够从活动B按下后退按钮并进入活动A …
我想知道现代Android开发世界中有关Back Stack管理的常见做法或模式,特别是处理应用程序被杀或崩溃的情况,以及系统尝试重新创建其活动,因为应用程序创建的任务仍然存在.
以下是在示例应用上演示上述行为的视频:https://www.dropbox.com/s/pkm88dvdpzsw9lm/IMG_2334-480.mov?dl = 0
这里是源代码 - 基本上只是一个使用Android Studio向导创建的简单应用程序:ssh://git@github.com:lukaszs-appdate/crashingtask.git
假设该应用程序在开始时显示登录活动.然后当用户登录时从服务器下载数据并允许用户操作数据,启动其他活动,操纵应用程序的状态等.重要的假设是当用户例如切换到不同的应用程序并返回到我们的应用程序时,他们看到最后一个活动,而不是回到登录.因此,我认为文档https://developer.android.com/guide/components/activities/tasks-and-back-stack.html中的标记组合不足以解决问题.
问题是,当:a)应用程序崩溃并重新启动,或b)使用Android中的任务切换按钮将应用程序移至后台,然后在Android Studio中手动终止并通过点击任务图标然后返回Android尝试从任务中重新创建活动.我想让它在这些事件的情况下从头开始启动应用程序并显示登录屏幕.
我看到的唯一解决方案是除了登录之外的所有活动的一些丑陋的父类,我们将检查是否设置了一些伪会话变量,如果不是,则假设应用程序已重新启动并替换整个任务堆栈登录活动,或者做一些finish()调用或其他类似臭的东西.
还有其他想法吗?当有问题的应用程序被杀死时,Android是否只能删除应用程序创建的任务?
一个干净的解决方案是使用某种会话管理,允许任何活动有效地恢复应用程序的业务状态,使用户能够从任何活动中正确地恢复应用程序,即使它已被杀死.但这是另一个讨论.
当我按下设备的后退按钮时,我想进入主屏幕.我正在使用此代码..
public void onBackPressed() {
this.finish();
return;
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何清理堆栈的所有先前活动(新的除外),但我想在Android API 10(Android 2.3.3)中使用它.
在这个答案的指导下,我知道这不是直接可能的,因为自从API 11以来,专用的标志就存在了.
但我想知道这是否可能有一些兼容性,或者有人有任何解决方案.
提前致谢.
android android-intent android-compatibility android-activity
任何人都可以帮助我完成我的任务我有一个actvitiy我在新的Intent新活动中打开,而且在这个新的活动中我再次打开新意图(previsios活动没有关闭,所以我可以在设备上点击后退按钮返回给他们).我想写"退出按钮"并开始新的活动,我只能关闭一个previsios活动,但pre-previsios仍然是开放的.在理想它喜欢 - MainActivity - > SettingsActivity - > LogoutActivity(这里我们必须回到loginActivity)我试过
mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)
但没有运气:(