Android Activity的生命周期结构
创始人
2024-07-31 21:11:18
0

 下图是官网的Activity生命周期结构图,从这个图中可以看出Activity的生命周期函数挺多的,其实他的生命周期和以往我们看到的其他组件的生命周期一样,都是从创建到销毁的过程,只不过之间多加了几个生命周期函数,将他的生命周期细化了。

Activity生命周期结构图

首先看到的事onCreate()函数,顾名思义这个函数在Activity开始创建时调用,可以在其中定义一些初始化操作。接下来是 onStart()方法,这个方法在Activity开始被执行时调用,它紧随onCreate()方法之后调用,接着是onResume()方法,这个 方法对我们来说算是比较陌生的,这个方法是在该Activity或得用户输入焦点时被调用,这个或得用户输入焦点有点不好理解,如果我们用过 Android手机或者其他系统的手机时,经常会看到有些窗口虽然能看到但无法对他进行操作,这时的Activity就没有或得用户焦点。当这个方法调用 后Activity开始真正的运行了,在Activity正在运行时用户激活了另一个Activity,这时将调用***个Activity的 onPause()方法,可以理解为***个Activity被暂停了,这个时候如果系统的内存不够用,***个Activity的进程可能被停止(何时被停 止是由系统决定的,不需要我们参入),当下次我们再运行***个Activity时就需要重新创建这个Activity,那就又需要调用 onCreate()方法。如果在这个Activity没有被停止的情况下,我们重新调用***个Activity,就会直接调用它的onResume() 方法后开始运行。如果***个Activity很久都没有得到再次运行机会,就会调用onStop()被停止,这时如果Activity又或得用户输入焦 点,就会调用onRestart()方法,重新开始执行这个Activity,或者被系统停止,否则调用onDestroy()方法销毁 Activity。其实在实际开发中我们很少会用到所有的生命周期函数,但我们要弄清它的原理,在使用时知道所以然就行了。

下面来看一个实例

***个Activity的布局文件(main.xml):

Xml代码

  1.    
  2.     android:orientation="vertical"   
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent"   
  5.     >   
  6.     android:layout_width="fill_parent"    
  7.     android:layout_height="wrap_content"    
  8.     android:text="@string/hello"   
  9.     />   
  10.     android:id="@+id/myButton"   
  11.     android:layout_width="fill_parent"   
  12.     android:layout_height="wrap_content"   
  13.     android:text="@string/first_button"   
  14.     />   
  15.    

第二个Activity的布局文件(Second.xml):

Xml代码

  1.    
  2.       package="mars.activity05"   
  3.       android:versionCode="1"   
  4.       android:versionName="1.0">   
  5.        
  6.         
  7.                   android:label="@string/app_name">   
  8.                
  9.                    
  10.                    
  11.                
  12.            
  13.         
  14.                   android:label="SecondActivity"   
  15.                   android:theme="@android:style/Theme.Dialog"/>   
  16.    
  17.        
  18.        
  19.    
  20.     

FirstActivity.java:

Java代码

  1. package mars.activity05;   
  2.    
  3. import android.app.Activity;   
  4. import android.content.Intent;   
  5. import android.os.Bundle;   
  6. import android.view.View;   
  7. import android.view.View.OnClickListener;   
  8. import android.widget.Button;   
  9.    
  10. public class FirstActivity extends Activity {   
  11.     /** Called when the activity is first created. */   
  12.     private Button myButton;   
  13.    
  14.     @Override   
  15.     public void onCreate(Bundle savedInstanceState) {   
  16.         System.out.println("FirstActivity ---> onCreate   ");   
  17.         super.onCreate(savedInstanceState);   
  18.         setContentView(R.layout.main);   
  19.         myButton = (Button) findViewById(R.id.myButton);   
  20.         myButton.setOnClickListener(new ButtonListener());   
  21.     }   
  22.    
  23.     @Override   
  24.     protected void onDestroy() {   
  25.         // TODO Auto-generated method stub   
  26.         System.out.println("FirstAcvity --->onDestory");   
  27.         super.onDestroy();   
  28.     }   
  29.    
  30.     @Override   
  31.     protected void onPause() {   
  32.         // TODO Auto-generated method stub   
  33.         System.out.println("FirstAcvity --->onPause");   
  34.         super.onPause();   
  35.     }   
  36.    
  37.     @Override   
  38.     protected void onRestart() {   
  39.         // TODO Auto-generated method stub   
  40.         System.out.println("FirstAcvity --->onRestart");   
  41.         super.onRestart();   
  42.     }   
  43.    
  44.     @Override   
  45.     protected void onResume() {   
  46.         // TODO Auto-generated method stub   
  47.         System.out.println("FirstAcvity --->onResume");   
  48.         super.onResume();   
  49.     }   
  50.    
  51.     @Override   
  52.     protected void onStart() {   
  53.         // TODO Auto-generated method stub   
  54.         System.out.println("FirstAcvity --->onStart");   
  55.         super.onStart();   
  56.     }   
  57.    
  58.     @Override   
  59.     protected void onStop() {   
  60.         // TODO Auto-generated method stub   
  61.         System.out.println("FirstAcvity --->onStop");   
  62.         super.onStop();   
  63.     }   
  64.    
  65.     class ButtonListener implements OnClickListener {   
  66.    
  67.         @Override   
  68.         public void onClick(View v) {   
  69.             // TODO Auto-generated method stub   
  70.             Intent intent = new Intent();   
  71.             intent.setClass(FirstActivity.this, SecondActivity.class);   
  72.             FirstActivity.this.startActivity(intent);   
  73.         }   
  74.    
  75.     }   
  76.    
  77. }   

SecondActivity.java:

Java代码

  1. package mars.activity05;   
  2.    
  3. import android.app.Activity;   
  4. import android.content.Intent;   
  5. import android.os.Bundle;   
  6. import android.view.View;   
  7. import android.view.View.OnClickListener;   
  8. import android.widget.Button;   
  9.    
  10. public class SecondActivity extends Activity{   
  11.    
  12.     private Button secondButton;   
  13.        
  14.     @Override   
  15.     protected void onCreate(Bundle savedInstanceState) {   
  16.         System.out.println("SecondActivity--->onCreate");   
  17.         // TODO Auto-generated method stub   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(R.layout.second);   
  20.         secondButton = (Button)findViewById(R.id.secondButton);   
  21.         secondButton.setOnClickListener(new ButtonListener());   
  22.     }   
  23.    
  24.     @Override   
  25.     protected void onDestroy() {   
  26.         // TODO Auto-generated method stub   
  27.         System.out.println("SecondActivity--->onDestory");   
  28.         super.onDestroy();   
  29.     }   
  30.    
  31.     @Override   
  32.     protected void onPause() {   
  33.         // TODO Auto-generated method stub   
  34.         System.out.println("SecondActivity--->onPause");   
  35.         super.onPause();   
  36.     }   
  37.    
  38.     @Override   
  39.     protected void onRestart() {   
  40.         // TODO Auto-generated method stub   
  41.         System.out.println("SecondActivity--->onRestart");   
  42.         super.onRestart();   
  43.     }   
  44.    
  45.     @Override   
  46.     protected void onResume() {   
  47.         // TODO Auto-generated method stub   
  48.         System.out.println("SecondActivity--->onResume");   
  49.         super.onResume();   
  50.     }   
  51.    
  52.     @Override   
  53.     protected void onStart() {   
  54.         // TODO Auto-generated method stub   
  55.         System.out.println("SecondActivity--->onStart");   
  56.         super.onStart();   
  57.     }   
  58.    
  59.     @Override   
  60.     protected void onStop() {   
  61.         // TODO Auto-generated method stub   
  62.         System.out.println("SecondActivity--->onStop");   
  63.         super.onStop();   
  64.     }   
  65.    
  66.     class ButtonListener implements OnClickListener{   
  67.    
  68.         @Override   
  69.         public void onClick(View v) {   
  70.             // TODO Auto-generated method stub   
  71.             Intent intent = new Intent();   
  72.             intent.setClass(SecondActivity.this, FirstActivity.class);   
  73.             SecondActivity.this.startActivity(intent);   
  74.         }   
  75.            
  76.     }   
  77. }   

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...