android应用开发之Activity的生命周期

当Activity处于Android应用中运行时,它的活动Android以Activity栈的形式管理。当前活动的Activity位于栈顶。随着不通应用的运行,每个Activity都可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。
Activity的四个状态:
1.活动状态Running:当前Activity位于前台,用户可见,可以获得焦点。
2.暂停状态Pause:其他Activity位于前台,该Activity依然可见,只是不能获得焦点
3.停止状态Stop:该Activity不可见,失去焦点
4.销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。
          (Dalvik是Google公司自己设计用于Android平台的Java虚拟机。)

下面是Android官方文档中Activity生命周期及相关回调方法


状态转换

Activity从创建到进入运行态所触发的事件

onCreate()-->onStart()-->onResume()

从运行状态到停止状态所触发的事件

onPause()-->onStop()

从停止状态到运行态所触发事件

onRestart()-->onStart()-->onResume()

从运行态到暂停状态所触发事件

onPause()

从暂停状态到运行态所触发事件

onResume()

  我们可以注意到,到目前为止我们所写的每一个Activity都覆盖了onCreate方法,这个方法就是对Activity执行初始化。那么其他的事件都怎么用呢?下面我们举个例子来看一下。下面的Activity覆盖了上面7个生命周期方法,每个方法中都写了一个记录日子的代码,并且我们在onCreate中添加了一个退出按钮的监听器。


  1. package song.activity; 
  2.  
  3. import android.app.Activity; 
  4. import android.os.Bundle; 
  5. import android.util.Log; 
  6. import android.view.View; 
  7. import android.view.View.OnClickListener; 
  8. import android.widget.Button; 
  9.  
  10. public class LifeCycleActivity extends Activity { 
  11.     private static final String TAG = "lifeCycle"
  12.  
  13.     @Override 
  14.     public void onCreate(Bundle savedInstanceState) { 
  15.         super.onCreate(savedInstanceState); 
  16.         setContentView(R.layout.main); 
  17.         Log.d(TAG, "onCreate"); 
  18.         Button btn = (Button) findViewById(R.id.exit); 
  19.         btn.setOnClickListener(new OnClickListener() { 
  20.  
  21.             @Override 
  22.             public void onClick(View v) { 
  23.                 // 结束本Activity 
  24.                 LifeCycleActivity.this.finish(); 
  25.             } 
  26.         }); 
  27.     } 
  28.  
  29.     @Override 
  30.     protected void onDestroy() { 
  31.         // TODO Auto-generated method stub 
  32.         super.onDestroy(); 
  33.         Log.d(TAG, "onDestroy"); 
  34.     } 
  35.  
  36.     @Override 
  37.     protected void onPause() { 
  38.         // TODO Auto-generated method stub 
  39.         super.onPause(); 
  40.         Log.d(TAG, "onPause"); 
  41.     } 
  42.  
  43.     @Override 
  44.     protected void onRestart() { 
  45.         // TODO Auto-generated method stub 
  46.         super.onRestart(); 
  47.         Log.d(TAG, "onRestart"); 
  48.     } 
  49.  
  50.     @Override 
  51.     protected void onResume() { 
  52.         // TODO Auto-generated method stub 
  53.         super.onResume(); 
  54.         Log.d(TAG, "onResume"); 
  55.     } 
  56.  
  57.     @Override 
  58.     protected void onStart() { 
  59.         // TODO Auto-generated method stub 
  60.         super.onStart(); 
  61.         Log.d(TAG, "onStart"); 
  62.     } 
  63.  
  64.     @Override 
  65.     protected void onStop() { 
  66.         // TODO Auto-generated method stub 
  67.         super.onStop(); 
  68.         Log.d(TAG, "onStop"); 
  69.     } 
  70.  

将该Activity设置成程序的入口Activity,当程序自动启动时将会自动启动并执行Activity,此处可以在LogCat窗口看到输出,如图

大家看到

运行activity
onCreate —— onStart —— onResume

当我点击模拟器上的返回键和我添加的退出按钮时,如图

点返回键和退出按钮时
onPause —— onStop —— onDestroy

那如果我程序运行时点击home键,会出现怎样的效果呢?

运行程序,点击home键

长按home键:

1、运行
2、点击Home(小房子)
onPause —— onStop
3、长按Home重新回到ActivityLifeCycle
onRestart —— onStart —— onResume


ok,那我们再写一个Activity,命名为SecondActivity,在其中我们添加一个返回按钮(两个Activity通过Intent切换),记得要做AndroidManifest.xml中注册

1.创建second.xml(xml文件中不能出现大写字母),添加一个返回的Button

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent" 
  5.     android:orientation="vertical" > 
  6.  
  7.     <TextView 
  8.         android:id="@+id/welcome" 
  9.         android:layout_width="match_parent" 
  10.         android:layout_height="wrap_content" 
  11.         android:text="欢迎来到第二个Activity"/> 
  12.    <Button  
  13.        android:id="@+id/back" 
  14.        android:layout_width="match_parent" 
  15.        android:layout_height="wrap_content" 
  16.        android:text="Back"/> 
  17. </LinearLayout> 

2.第二个Activity:

  1. package song.activity; 
  2. import android.app.Activity; 
  3. import android.content.Intent; 
  4. import android.os.Bundle; 
  5. import android.view.View; 
  6. import android.widget.Button; 
  7. /**我是第SecondActivity*/ 
  8. public class SecondActivity extends Activity { 
  9.  
  10.     @Override 
  11.     protected void onCreate(Bundle savedInstanceState) { 
  12.         super.onCreate(savedInstanceState); 
  13.         setContentView(R.layout.second); 
  14.          
  15.         Button backBtn = (Button) this.findViewById(R.id.back); 
  16.          
  17.         backBtn.setOnClickListener(new View.OnClickListener() { 
  18.              
  19.             @Override 
  20.             public void onClick(View v) { 
  21.                 /*返回LifecyclingActivity*/Intent intent = new Intent(SecondActivity.this,LifeCycleActivity.class); 
  22.                 startActivity(intent); 
  23.             } 
  24.         }); 
  25.          
  26.     } 
  27.  
  28.      
3.在AndroidManifest.xml中注册(添加下面的语句)
  1. <activity android:name=".SecondActivity"></activity> 
4.在LifecycleActivity中添加一个Button,使之能够切换到第二个Activity,(xml中Button添加较简单,在这里就不写出了)

在第一个Activity的onCreate中添加第二个Button监听器

  1. //添加切换Activity的Button 
  2.         Button btn2 = (Button) findViewById(R.id.change); 
  3.         btn2.setOnClickListener(new OnClickListener() { 
  4.              
  5.             @Override 
  6.             public void onClick(View v) { 
  7.                 Intent intent = new Intent(LifeCycleActivity.this, SecondActivity.class); 
  8.                 startActivity(intent); 
  9.             } 
  10.         }); 

好的,Button添加完了,如图

注:为了好看,我修改了上面添加的退出Button的大小

现在我们来看一下,当我们点击第一个Activity总的切换按钮时,LogCat中会有怎样的日志记录呢?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值