2.5 Activity生命周期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.5 Activity生命周期相关的知识,希望对你有一定的参考价值。
先说一下我们上面运行的程序,当用户在手机上看到显示的内容(如:2.2 音乐播放示例),其中内容部分在android开发中都需要一个应用组件来实现,这个组件叫做Activity。大家可以这样子去理解Activity,它就是完成手机屏幕内容的显示。 在学习Android开发时,理解并掌握Activity的生命周期很重要。例如:当手机屏幕内容从一个界面切换到另一个界面,这就需要从一个Activity切换到另一个Activity,其中他们是如何运行的,这就需要理解Activity的生命周期。
先给一个Google官方的图解图
测试Activity生命周期,见下面的程序代码
package com.android; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.View; import android.widget.Button; public class LifeCycleActivity extends Activity { private static final String TAG = "LifeCycleActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.v(TAG, "onCreate Called"); Button btn1 = (Button) findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /* Intent实现Activity与Activity之间的切换 */ Intent intent = new Intent(LifeCycleActivity.this, TargetActivity.class); startActivity(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.v(TAG, "onDestroy Called"); } @Override protected void onPause() { super.onPause(); Log.v(TAG, "onPause Called"); } @Override protected void onRestart() { super.onRestart(); Log.v(TAG, "onRestart Called"); } @Override protected void onResume() { super.onResume(); Log.v(TAG, "onResume Called"); } @Override protected void onStart() { super.onStart(); Log.v(TAG, "onStart Called"); } @Override protected void onStop() { super.onStop(); Log.v(TAG, "onStop Called"); } }
package com.android; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class TargetActivity extends Activity { private static final String TAG = "TargetActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.target); Button btn2 = (Button) findViewById(R.id.btn2); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(TargetActivity.this, LifeCycleActivity.class); startActivity(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.v(TAG, "onDestroy Called"); } @Override protected void onPause() { super.onPause(); Log.v(TAG, "onPause Called"); } @Override protected void onRestart() { super.onRestart(); Log.v(TAG, "onRestart Called"); } @Override protected void onResume() { super.onResume(); Log.v(TAG, "onResume Called"); } @Override protected void onStart() { super.onStart(); Log.v(TAG, "onStart Called"); } @Override protected void onStop() { super.onStop(); Log.v(TAG, "onStop Called"); } }
上面两个Activity,其中LifeCycleActivity为APP的主运行程序,而TargetActivity需要LifeCycleActivity来调用才能运行。当然上面的两段代码有几个关注点需要解释一下
- Log.v(TAG,"onCreate Called"):这个是Android程序中特有的日志输出程序,对调试Android程序比较有用,输出的结果可以在eclipse中LogCat中查阅
- Intent intent = new Intent(TargetActivity.this, LifeCycleActivity.class); 这段代码是Android的中两个Activity相互传递信息的类(即:一个Activity想调用另一个Activity,需要使用Intent)
- startActivity(intent); 启动Intent,来调用TargetActivity
注意:查看Activity生命周期需要重写Activity中的方法。重写方法请参照上面的图片
有了上面Activity生命周期的流程图,我们先给大家总结一下Activity生命周期的几个过程
- 启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
- 当Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。 当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
- 当Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
- 用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
- 当Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
- 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
文章内容来自:国信安刘阳
以上是关于2.5 Activity生命周期的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fragment 和 Activity 执行生命周期流程的问题