Activity的生命周期

转载于: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。这整个过程看起来有点绕,其实在实际开发中我们很少会用到所有的生命周期函数,但我们要弄清它的原理,在使用时知道所以然就行了。

 

下面来看一个实例(实例只列出一些重要的文件内容,具体的创建步骤可以参考之前的文章,实例源码参考mars老师的android视频教程):

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

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/hello"  
  11.     />  
  12. <Button  
  13.     android:id="@+id/myButton"  
  14.     android:layout_width="fill_parent"  
  15.     android:layout_height="wrap_content"  
  16.     android:text="@string/first_button"  
  17.     />  
  18. </LinearLayout>  

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

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="wrap_content"  
  6.     >  
  7.     <TextView   
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         ></TextView>  
  11.     <Button   
  12.         android:id="@+id/secondButton"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:text="@string/second_button"  
  16.         />  
  17. </LinearLayout>  

 AndroidManifest.xml:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="mars.activity05"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".FirstActivity"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.         <activity android:name=".SecondActivity"  
  15.                   android:label="SecondActivity"  
  16.                   android:theme="@android:style/Theme.Dialog"/>  
  17.   
  18.     </application>  
  19.     <uses-sdk android:minSdkVersion="4" />  
  20.   
  21. </manifest>   

 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. }  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值