在自学android的过程中我走了蛮多弯路的,在此希望对android感兴趣的小伙伴们少走一些弯路,在此我给大家介绍一下我对activity生命周期的理解.(如有哪里写的不对希望大牛们多指点指点,感激不进)
要想了解activity的生命周期肯定没有官方资料说的详细,但阅读官方资料对一些小伙伴来说坑定是有一些困难的(本人也是如此-.-!),但官方资料的解释还是十分给力的,所以我将围绕官方资料的图来讲解,废话不多说上图.
protected void onCreate ( Bundle savedInstanceState );
protected void onStart ();
protected void onRestart ();
protected void onResume ();
protected void onPause ();
protected void onStop ();
protected void onDestroy ();
}
可能大家不太看得懂上面图的意思,让我们一起来做一个简单的demo来更好的理解该图
第一步:创建一个ActivityDemo的工程
第二步:在MainActivity中重写Activity中的7个方法代码如下:
package com.example.liangchao.activitydemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("_________________A onCreate_________________"); } @Override protected void onStart() { super.onStart(); System.out.println("_________________A onStart_________________"); } @Override protected void onResume() { super.onResume(); System.out.println("_________________A onResume_________________"); } @Override protected void onPause() { super.onPause(); System.out.println("_________________A onPause___________________"); } @Override protected void onStop() { super.onStop(); System.out.println("___________________A onStop____________________"); } @Override protected void onDestroy() { super.onDestroy(); System.out.println("____________________A onDestroy___________________"); } @Override protected void onRestart() { super.onRestart(); System.out.println("____________________A onRestart____________________"); } }
第三步:运行demo让我们看一下打印日志
第一次运行demo,程序加载该activity先后执行 onCreate()->onStart()->onResume()三个方法如图:
Back键: 当我们按返回键时,该activity先后执行了onPause->onStop->onDestroy (此时改activity已经被销毁,如果重新导航到该activity会执行上面第一次加载activity这一步骤,因为demo中就只有一个activity,当它被销毁时程序也就同时结束了)
Home键:当我们按home键是,该activity执行了onPause->onStop (此时的activity并没有被销毁,系统依旧保留改activity的数据)
所以我们在次启动activity时并没有执行onCreate这个方法,而是执行:onRestart->onStart->onResume三个方法
以上就是单个activity在不同情况是后的什么周期,接下来让我们看看多个activity 通过Intent,start出来的activity直接的什么生命周期吧
第一步:创建一个新的activity
第二步:给MainActivity的xml布局文件加一个跳转新的activity的按钮,并通过Intent和startActivity()来跳转(xml文件就不放了-.-)
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("_________________A onCreate_________________"); findViewById(R.id.button_newACT).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // new 一个跳转到ActivityTwo Intent intent = new Intent(MainActivity.this,ActivityTwo.class); startActivity(intent); } }); }
第三步:给ActivityTwo跳转MainActivity的按钮
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); System.out.println("_________________B onCreate_________________"); findViewById(R.id.button_return).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ActivityTwo.this,MainActivity.class); startActivity(intent); } });
第四步,让我没来看看运行时的打印日志吧
MainActivity跳转到ActivityTwo:MainActivity(onPause)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); System.out.println("_________________B onCreate_________________"); findViewById(R.id.button_return).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Intent intent = new Intent(ActivityTwo.this,MainActivity.class); // startActivity(intent); finish(); } });