最近在看android的书,引起了一些启发和回忆起以前的面试经历,那是我进入第一家公司的面试官问我的问题,虽然我回答错了,但是依然被录取了,非常高兴,也非常荣幸。后来又对这个知识点进行了学习。现在看了书,再一次对比起来,发现有新的理解。
例子:这里先列举2个Activity分别为:ActivityA和ActivityB,我们要点击ActivityA的启动ActivityB按钮,来启动ActivityB,然后点击返回键。
1、期间经历了哪些生命周期?
先看ActivityA和ActivityB的代码:
ActivityA.java
public class ActivityA extends Activity {
private ActivityA _this;
private String TAG=ActivityA.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG,"onCreate");
setContentView(R.layout.activity_a);
_this=this;
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG,"onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG,"onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG,"onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG,"onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG,"onDestroy");
}
public void startActivityB(View v){
Intent intent=new Intent(_this,ActivityB.class);
startActivity(intent);
}
}
activity_a.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startActivityB"
android:text="启动ActivityB"
/>
</LinearLayout>
ActivityB.java的代码
public class ActivityB extends Activity {
private ActivityB _this;
private String TAG=ActivityB.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG,"onCreate");
setContentView(R.layout.activity_a);
_this=this;
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG,"onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG,"onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG,"onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG,"onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG,"onDestroy");
}
public void startActivityB(View v){
Intent intent=new Intent(_this,ActivityB.class);
startActivity(intent);
}
}
好了,重点来了。
- (1)我先启动了ActivityA,生命周期
- (2)然后点击ActivityA的跳转按钮
- (3)点击ActivityB的返回按钮。
注意看我圈出来的地方,ActivityA先onPause了,ActivityB执行了onCreate,当ActivityB的onResume执行了,ActivityA才stop,这个是不是和我们经常看的activity的生命周期是一样的。
对,就是一样的。到这里第一个问题已经回答了。
2、新启发,关于onStart和onResume、onPause和onStop的实质不同点?
还是看上图我画圈的地方,因为在activity中onStart和onStop是从Activity是否可见的角度来说的,而onResume和onPause是从Activity是否位于前台的角度来说的。
是否可见和是否位于前台区别想必大家可想而知了。
可见并不代表已经显示在用户眼前了。(这一句才是最该理解的)
这也是我们经常在onResume中做一些显示之前的数据刷新的工作了。
好了,就到这里,谢谢大家花耐心看完。