我有一个当我启动应用程序时启动的MainActivity,我知道只有在那时onCreate才会被调用,然后onStart才会被调用。在不先调用onCreate的情况下,有没有办法知道onStart是否被调用了?我的意思是,如果我在第二个活动中按下后退按钮,那么只会调用onStart,如何解决这个问题呢?或者,也许有一种方法可以知道一个活动在整个活动堆栈中的位置?
提前感谢!
编辑:
我有这个MainActivity,它会把你送到LoginActivity,或者如果你已经登录了,它会把你送到ProfileActivity。当我在ProfileActivity中按下back时,我希望能够回到家,而不是MainActivity。我知道如何重写back按钮来充当主页按钮,但问题是我还有其他活动,如果我在ProfileActivity上按back,我只想让它在onPause中没有其他活动的情况下表现得像home按钮。
已解决:
@Override
public void onStart(){
super.onStart();
if(counter == -1){
finish();
}
}
@Override
public void onPause(){
super.onPause();
counter--;
}我要向ArcDare致敬,因为他给了我实现计数器的想法,谢谢!
发布于 2011-11-09 18:09:24
您的问题与活动生命周期相关。
onCreate()仅在activity启动时才会被调用,无论是应用程序启动还是进程终止。Pause状态。在这种情况下,当用户按下back按钮,然后调用onResume() get。Stop状态。The foreground lifetime of an activity发生在对onResume()的调用和对onPause()的相应调用之间。在此期间,该活动位于所有其他活动的前面,并与用户交互。活动可以经常在恢复状态和暂停状态之间转换--例如,当设备进入睡眠状态时,当活动结果被提交时,当新的意图被提交时--因此这些方法中的代码应该是相当轻量级的。
在这种情况下,活动以onRestart() -> onStart()为单位。
有关活动生命周期的详细描述,请参阅此doc。
您在上面的评论中提到的针对特定问题的:
一旦你完成了MainActivity/LoginActivity finish(),它们就不会在你的activity堆栈中,现在如果堆栈中没有activity,那么按下back按钮,它将转到主页屏幕,或者如果有活动,它将导航到该屏幕。现在你不需要重写后退按钮了。
发布于 2011-11-09 18:09:20
您始终可以将调试消息放在onStart()和onCreate()中,并查看它们何时被调用。另请参阅有关该活动的lifecycle的文档。
发布于 2011-11-09 18:12:35
如何解决这个问题呢?
只需创建静态变量:
int timesOnCreate=0;
int timesOnStart=0;并在他们的身体里增加它们:
public void onCreate(){
timesOnCreate++;
(...)
}
(...)
public void onStart(){
timesOnStart++;
(...)
}像这样,你只需要检查var。
https://stackoverflow.com/questions/8063239
复制相似问题