Android - 活动onStart

时间:2011-11-09 09:58:24

标签: android android-activity

我有这个MainActivity,它在我启动应用程序时启动,而且我知道只有这样才会调用onCreate,之后将调用onStart。 无论如何要知道onStart是否已被调用,而没有首先调用onCreate? 我的意思是如果我从第二个活动按回按钮,那么只会调用onStart,怎么能搞清楚?或者也许有一种方法可以知道整个活动堆栈中一个活动的位置?

提前致谢!

编辑:

我有这个MainActivity,它会将您发送到LoginActivity,或者如果您已经登录,它会将您发送到ProfileActivity。当我按下ProfileActivity时,我希望能够回家,而不是MainActivity。我知道如何覆盖后退按钮以像主页按钮一样工作,但问题是我有其他活动,如果我按回ProfileActivity,我只希望它在家中行动,如果onPause中没有其他活动。

解决:

@Override
public void onStart(){
    super.onStart();
    if(counter == -1){
        finish();   
    }
}

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

我会向ArcDare表达我的想法,让我知道实施计数器,谢谢!

5 个答案:

答案 0 :(得分:1)

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

  1. onCreate()仅在您的应用启动活动时或在流程被杀后才会被调用。

  2. 当其他活动过来时,活动会进入Pause状态。在这种情况下,当用户按下后退按钮,然后onResume()被叫。

  3. 当活动不在前台时,活动会进入Stop状态。

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

    在这种情况下,活动进入onRestart() -> onStart()

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

    针对您在上述评论中提到的具体问题:

    完成MainActivity / LoginActivity完成()之后,它们将不在您的活动堆栈中,现在如果您的堆栈中没有活动,那么按下后退按钮它将进入主屏幕或者它有然后它将导航到该屏幕。现在您不需要覆盖后退按钮。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

如何解决这个问题?

只需创建静态变量:

int timesOnCreate=0;
int timesOnStart=0;

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

public void onCreate(){
timesOnCreate++;
(...)
}

(...)

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

像这样你只需检查变种。

答案 3 :(得分:0)

试试这样。

private static onCreateCalled;
private static onStartCalled;

onCreate(){
   onCreateCalled = true;
   onStartCalled = false;   
}

onPause(){
  onCreateCalled = false;
  onStartCalled = false;
}

onStart(){
   onStartCalled = true;        
}

答案 4 :(得分:0)

如果 谁想知道何时被调用,你可以在调用时干杯:

public void onCreate(){
    Context context = getApplicationContext();
    CharSequence text = "onCreate has been Called";
    int length= Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, length);
    toast.show();
(...)
}
(...)
public void onStart(){
        Context context = getApplicationContext();
    CharSequence text = "onStart has been Called";
    int length= Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, length);
    toast.show();
(...)
}

如果您希望 您的应用 知道它,您可以使用我们之前谈过的变量,因此您检查它们然后再将它们= 0,这样它们和#39;表现得像旗帜;是旗帜!= 0?它被称为。是= 0吗?它还没有被召唤。