vir*_*sir 116 lifecycle android android-activity
我想知道如果退出当前活动,用户是否会返回主屏幕.
rau*_*aug 151
对于有类似问题的人,我将发布@ H9kDroid的评论作为最佳答案.
您可以使用isTaskRoot()来了解活动是否是任务的根.
我希望这有帮助
san*_*tar 108
更新(2015年7月):
由于getRunningTasks()得到过时,从API 21这是更好地遵循raukodraug 答案或埃德伯内特 一个(我宁愿第二个).
可以使用ActivityManager检查当前任务及其堆栈.
因此,要确定活动是否是最后一个:
使用以下代码:
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 &&
taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
Log.i(TAG, "This is last activity in the stack");
}
Run Code Online (Sandbox Code Playgroud)请注意,上述代码仅在您有单个任务时才有效.如果您的应用程序可能存在多个任务 - 您需要检查其他taskList元素.阅读有关任务任务和后台堆栈的更多信息
希望这对新手有帮助。根据以上对我来说很有效的答案,我也共享代码段,以使其易于实现。
解决方案:如果当前活动仅是您堆栈中的活动,并且我还处理如果堆栈中有一些活动则转到堆栈中的最后一个活动而不是打开新的自定义活动的情况,那么我将使用isTaskRoot()
此方法返回true。
在您的活动中
@Override
public void onBackPressed() {
if(isTaskRoot()){
startActivity(new Intent(currentActivityName.this,ActivityNameYouWantToOpen.class));
// using finish() is optional, use it if you do not want to keep currentActivity in stack
finish();
}else{
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
跟踪此情况的一种方法是在开始新活动时包含一个标记并检查该标记是否存在。
每当您开始一项新活动时,请插入标记:
newIntent=new Intent(this, NextOne.class);
newIntent.putExtra(this.getPackageName()+"myself", 0);
startActivity(newIntent);
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样检查它:
boolean islast=!getIntent().hasExtra(this.getPackageName()+"myself")
Run Code Online (Sandbox Code Playgroud)
虽然可能有办法实现这一点(见其他答案),但我建议你不要这样做.普通的Android应用程序不需要知道主屏幕是否即将显示.
如果您正在尝试保存数据,请将数据保存代码放在onPause()方法中.如果您试图让用户改变他们对现有应用程序的看法,您可以截取Back键和onBackPressed()方法的向上/向下键,并向他们显示"你确定吗?" 提示.
归档时间: |
|
查看次数: |
76490 次 |
最近记录: |