当在电话上按下BACK按钮时,我想阻止特定活动返回到之前的活动.
具体来说,我有登录和注册屏幕,都会HomeScreen在成功登录/注册时启动一个新活动.启动HomeScreen后,我想通过按BACK键阻止用户返回登录或注册屏幕.
我尝试过使用Intent.FLAG_ACTIVITY_NO_HISTORY,但由于应用程序有Facebook集成,当使用"使用Facebook登录"时,Facebook应该返回初始登录屏幕,因此我应该保留这些活动的历史记录.
HomeScreen当按下按钮并且我使用时,我想到覆盖BACK按钮的行为以直接完成应用程序
@Override
public void onBackPressed() {
finish();
}
Run Code Online (Sandbox Code Playgroud)
但这也行不通.
当我使用Android市场上的"打开"按钮启动时,我在应用程序中遇到了一个错误.似乎从市场上推出它会使用不同的意图,然后从手机的应用程序菜单中启动它.这导致启动相同活动的多个副本,这些副本彼此冲突.
例如,如果我的应用程序包含ABC活动,则上述问题可能会导致堆栈ABCA.
我尝试使用Intent所有活动来解决这个问题,但每当我点击HOME时,它都会产生不必要的副作用,即将活动堆栈清除为root.
示例: ABC - > HOME - > A当我需要的是ABC - > HOME - > ABC
在使用HOME时,是否有一种防止启动相同类型的多个活动而不重置根活动的好方法?
我的主要活动A已经android:launchMode="singleTask"在清单中设置了.现在,每当我从那里开始另一个活动,例如B并按下HOME BUTTON手机上的电话返回到主屏幕,然后再次返回我的应用程序,可以通过按应用程序的按钮或按下HOME BUTTON长按来显示我最近的应用程序不保留我的活动堆栈并直接返回A而不是预期的活动B.
这里有两个行为:
Expected: A > B > HOME > B
Actual: A > B > HOME > A (bad!)
Run Code Online (Sandbox Code Playgroud)
有没有我缺少的设置或这是一个错误?如果是后者,在修复错误之前是否有解决方法?
当应用程序的进程被终止时,将保存其活动堆栈.然后,当重新启动应用程序时,我的所有活动都会恢复并运行为空指针.我宁愿让我的应用程序从基本活动开始,而不是尝试重新创建活动堆栈,而不是修改每个活动以适应此事件.
这可能吗?
我知道Intent.FLAG_ACTIVITY_CLEAR_TOP,但据我所知,只会在重新创建后杀死活动.
编辑:是clearTaskOnLaunch我想要什么?我已将其添加到我的默认活动中,但看不到任何效果.但即使我只是最小化应用程序,这也会扼杀我的活动,不是吗?如果整个过程重启,我宁愿只清除堆栈.
编辑2:不,这不是我想要的 - 一位Android工程师对如何使用ClearTaskOnLaunch的一些问题做出了彻底的回应:http://groups.google.com/group/android-developers/browse_thread/thread/da024bcaf4e1960f/ab1e2b35c360cb65 ?PLI = 1
我的应用程序有以下流程:
首页 - >屏幕1->屏幕2->屏幕3->屏幕4->屏幕5>主页 - >屏幕2->主页 - >屏幕3
我的问题是,当我尝试关闭应用程序时,每当我尝试关闭应用程序时,Home活动就会打开.
我只想在用户在主屏幕上按下设备的后退键时关闭应用程序.
我不希望我的应用程序在按下按钮时显示很少Activity(说SplashScreenActivity)back.所以我noHistory=true在我的Manifest.xml用途中使用Activity如下所示:
<activity
android:name="com.gokul.SplashScreenActivity"
android:noHistory="true" >
</activity>
Run Code Online (Sandbox Code Playgroud)
noHistory我也可以finish()用我的SplashActivity.onPause()方法或任何我想要的方式调用,而不是设置,如下所示:
@Override
protected void onPause() {
super.onPause();
finish();
}
Run Code Online (Sandbox Code Playgroud)
两者都能完美地完成工作.但哪一个更好用,使用noHistory或打电话finish()?
我有一个活动的应用程序返回堆栈A - > B - > C - > D - > E.现在在活动E,我想知道我导航的后台堆栈活动.我怎么找到这个?
我有一个具有单个根Activity的应用程序.我最近引起了我的注意,任何一种强制关闭我的活动导致它重新启动,我不知道为什么会发生这种情况.如果我强制执行未捕获的异常或使用"长按后强制关闭"选项,它们都会产生相同的结果.
我唯一的猜测是某种形式的怪癖与保留对Activity的某些部分的引用有关,只有我在应用程序级别没有任何一些WeakReference条目.
相关的logcat条目:
05-25 08:25:49.137: INFO/ActivityManager(18449): Displayed uk.co.randomicon.rstb/.TreeBuilderActivity: +8s82ms
05-25 08:25:54.222: DEBUG/dalvikvm(18546): GC_EXPLICIT freed 12K, 57% free 3640K/8327K, external 8323K/10136K, paused 72ms
05-25 08:25:55.373: WARN/InputManagerService(18449): Got RemoteException sending setActive(false) notification to pid 19122 uid 10069
05-25 08:25:59.217: DEBUG/dalvikvm(18646): GC_EXPLICIT freed 128K, 48% free 2980K/5703K, external 0K/0K, paused 67ms
05-25 08:26:00.238: DEBUG/dalvikvm(18991): GC_CONCURRENT freed 343K, 51% free 2794K/5639K, external 303K/532K, paused 3ms+3ms
05-25 08:26:02.950: INFO/Process(18449): Sending signal. PID: 19554 SIG: 9
05-25 08:26:02.980: INFO/ActivityManager(18449): Process uk.co.randomicon.rstb (pid 19554) has died.
05-25 …Run Code Online (Sandbox Code Playgroud) 我想为我的学院创建一个应用程序.
问题是:我的应用程序将有两个布局(登录和仪表板).
学生可以正确填写登录表单,进入仪表板,按下按钮,填写其他字段.但是,如果用户然后按下后退按钮,它不应返回到登录屏幕,而是保留在仪表板中,否则退出应用程序.
然后,如果学生重新打开应用程序并且已经记录,则应自动将其重定向到仪表板,而不是登录屏幕,除非用户按下仪表板上的注销按钮,然后将其重定向回登录屏幕.
你怎么能做到这一点?
编辑: 我实现了2个意图和2个活动,并且我出现的新问题是,当我按下主页按钮并从任务管理器打开应用程序时,在剩下的活动中打开,但如果从图标打开则打开应用程序再次从第一个活动开始,在最后一个活动中打开了吗?
我的应用程序有两个活动,我按此顺序开始:
HOME > A > B
Run Code Online (Sandbox Code Playgroud)
现在我按HOME并再次启动"A".我想在"A"的顶部看到活动"B",但我得到"A" - 所以活动堆栈被清除.
表现:
<activity android:name=".activity.A" android:label="A" android:alwaysRetainTaskState="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activity.B" android:label="B">
<intent-filter>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
activity-stack ×10
android ×10
back-stack ×4
kill ×2
back ×1
back-button ×1
crash ×1
google-play ×1
login ×1
process ×1
session ×1