我有这个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表达我的想法,让我知道实施计数器,谢谢!
答案 0 :(得分:1)
您的问题与活动生命周期有关。
onCreate()
仅在您的应用启动活动时或在流程被杀后才会被调用。
当其他活动过来时,活动会进入Pause
状态。在这种情况下,当用户按下后退按钮,然后onResume()
被叫。
当活动不在前台时,活动会进入Stop
状态。
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吗?它还没有被召唤。