首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android - Activity onStart

Android - Activity onStart
EN

Stack Overflow用户
提问于 2011-11-09 17:58:24
回答 5查看 33.1K关注 0票数 2

我有一个当我启动应用程序时启动的MainActivity,我知道只有在那时onCreate才会被调用,然后onStart才会被调用。在不先调用onCreate的情况下,有没有办法知道onStart是否被调用了?我的意思是,如果我在第二个活动中按下后退按钮,那么只会调用onStart,如何解决这个问题呢?或者,也许有一种方法可以知道一个活动在整个活动堆栈中的位置?

提前感谢!

编辑:

我有这个MainActivity,它会把你送到LoginActivity,或者如果你已经登录了,它会把你送到ProfileActivity。当我在ProfileActivity中按下back时,我希望能够回到家,而不是MainActivity。我知道如何重写back按钮来充当主页按钮,但问题是我还有其他活动,如果我在ProfileActivity上按back,我只想让它在onPause中没有其他活动的情况下表现得像home按钮。

已解决:

代码语言:javascript
复制
@Override
public void onStart(){
    super.onStart();
    if(counter == -1){
        finish();   
    }
}

@Override
public void onPause(){
    super.onPause();
    counter--;
}

我要向ArcDare致敬,因为他给了我实现计数器的想法,谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-09 18:09:24

您的问题与活动生命周期相关。

  1. onCreate()仅在activity启动时才会被调用,无论是应用程序启动还是进程终止。
  2. 当另一个activity经过该活动时,activity将处于Pause状态。在这种情况下,当用户按下back按钮,然后调用onResume() get。
  3. 当活动不在前台时,活动进入Stop状态。

The foreground lifetime of an activity发生在对onResume()的调用和对onPause()的相应调用之间。在此期间,该活动位于所有其他活动的前面,并与用户交互。活动可以经常在恢复状态和暂停状态之间转换--例如,当设备进入睡眠状态时,当活动结果被提交时,当新的意图被提交时--因此这些方法中的代码应该是相当轻量级的。

在这种情况下,活动以onRestart() -> onStart()为单位。

有关活动生命周期的详细描述,请参阅此doc

您在上面的评论中提到的针对特定问题的

一旦你完成了MainActivity/LoginActivity finish(),它们就不会在你的activity堆栈中,现在如果堆栈中没有activity,那么按下back按钮,它将转到主页屏幕,或者如果有活动,它将导航到该屏幕。现在你不需要重写后退按钮了。

票数 1
EN

Stack Overflow用户

发布于 2011-11-09 18:09:20

您始终可以将调试消息放在onStart()和onCreate()中,并查看它们何时被调用。另请参阅有关该活动的lifecycle的文档。

票数 0
EN

Stack Overflow用户

发布于 2011-11-09 18:12:35

如何解决这个问题呢?

只需创建静态变量:

代码语言:javascript
复制
int timesOnCreate=0;
int timesOnStart=0;

并在他们的身体里增加它们:

代码语言:javascript
复制
public void onCreate(){
timesOnCreate++;
(...)
}

(...)

public void onStart(){
timesOnStart++;
(...)
}

像这样,你只需要检查var。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8063239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档