您的位置:首页 > 移动开发 > Android开发

Android中从一个Activity跳转到另一个Activity经历的生命周期?

2016-12-19 17:56 656 查看
最近在看android的书,引起了一些启发和回忆起以前的面试经历,那是我进入第一家公司的面试官问我的问题,虽然我回答错了,但是依然被录取了,非常高兴,也非常荣幸。后来又对这个知识点进行了学习。现在看了书,再一次对比起来,发现有新的理解。

这里先列举2个Activity分别为:ActivityA和ActivityB,我们要点击ActivityA的启动ActivityB按钮,来启动ActivityB,然后点击返回键。


1、期间经历了哪些生命周期?

2、新启发,关于onStart和onResume、onPause和onStop的实质不同点?

先看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的生命周期是一样的。



对,就是一样的。到这里第一个问题已经回答了。

第二个问题,还是看上图我画圈的地方,因为在activity中onStart和onStop是从Activity是否可见的角度来说的,而onResume和onPause是从Activity是否位于前台的角度来说的。

是否可见和是否位于前台区别想必大家可想而知了。

可见并不代表已经显示在用户眼前了。(这一句才是最该理解的)

这也是我们经常在onResume中做一些显示之前的数据刷新的工作了。

好了,就到这里,谢谢大家花耐心看完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: