Android成长的故事——Android生命周期的理解

       初学者来理解Activity的生命周期,可能不会马上产生多大的感触,甚至会不解为什么要有生命周期这种机制。但是随着慢慢深入Andorid的应用开发,你会发现它的重要性。

Activity的三种状态

Activity有三种状态,分别是运行状态、暂停状态以及停止状态。

运行状态:

Activity在屏幕的最前端(位于当前堆栈的顶部),它是可见的、有焦点的。可以用来进行处理用户的操作(点击、双击、长按等),那么就叫做激活或运行状态。值得注意的是,当Activity处于运行状态的时候,Android会尽可能的保持它的运行,即使出现内存不足

等情况,Android也会先杀死堆栈底部的Activity,来确保运行状态的Activity正常运行。

暂停状态:

在某些情况下,Activity对用户来说,仍然是可见的,但不再拥有焦点,即用户对它的操作是没用实际意义的。在这个时候,它就是属于暂停状态。例如:当最前端的Activity是个透明或者没有全屏,那么下层仍然可见的Activity就是暂停状态。暂停的Activity仍然是激活的(它保留着所有的状态和成员信息并保持与Activity管理器的连接),但当内存不足时,可能会被杀死。

停止状态:

Activity完全不可见时,它就处于停止状态。它仍然保留着当前状态和成员信息。然而这些对用户来说,都是不可见的;同暂停状态一样,当系统其他地方需要内存时,它也有被杀死的可能。

生命周期事件:

Activity状态的变化是人为操作的,而这些状态的改变,也会触发一些事件。我们且叫它生命周期事件。一共有7个。

void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()




当打开一个Activity,如果该Activity实例不存在于Activity管理器中,就会触发onCreate事件。注意,Activity的实例不是我们自己创建的,是Android系统自己创建的。接下来是onStart事件,然后是onResume事件,此时Activity就处于了运行状态。

首先要重写7个相应被触发的方法,以日志的形式输出相应的事件信息。然后添加两个Button,一个用来启动新的Activity,另一个是用来退出当前Activity

这里对生命周期做一个总结:

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

onCreate() àonStart() àonResume()

2.Activity从运行状态到停止状态所触发的事件:

onPause() àonStop()

3.Activity从停止状态到运行状态所触发的事件:

onRestart()àonStart()àonResume()

4. Activity从运行状态到暂停状态所触发的事件:

onPause()

5. Activity从暂停状态到运行状态所触发的事件:

onResume()

举例:

第一:

1、运行activity之后的状态转换:

package cn.lyhz;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
 
public class TestActivity extends Activity {
    private static final String TAG = "myTest";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG,"onCreate");
    }
protected void onDestroy() {
           //Log.i(TAG,"onDestroy");
           super.onDestroy();
}
protected void onPause() {
           Log.i(TAG,"onPasume");
           super.onPause();
}
protected void onRestart() {
           Log.i(TAG,"onRestart");
           super.onRestart();
}
protected void onResume() {
           Log.i(TAG,"onResume");
           super.onResume();
}
protected void onStart() {
           Log.i(TAG,"onstrat");
           super.onStart();
}
protected void onStop() {
           Log.i(TAG,"onStop");
           super.onStop();
}
}

2、点击红色圈住得那个按钮(返回键),会发生的状态是

onPasume—onStop—onDestroy

一般不会发生onDestroy事件,除非是有意的把一个activity关闭,Destroy之后是无法再返回的。

 

点击小房子后,运行的状态为onPesume—onStop,这是压栈的过程

返回之后再长按home键(小房子)重新回到activity,它的运行状态是onRestart—onStart—onResume,也就是出栈的过程。

第二:

写两个activity互相切换

package cn.lyhz;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
           // TODO Auto-generated method stub
           super.onCreate(savedInstanceState);
           setContentView(R.layout.seconde);
           Button backB = (Button)findViewById(R.id.backB);
           backB.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                             Intent intent = new Intent(SecondActivity.this,FirstActivity.class);
                             startActivity(intent);
                    }
           });
}
}

点击按钮,运行组状态是onPasume—onStop会切换到另一个界面。

 

点击返回按钮,它的运行状态是onCreate—onStart—onResume,点击手机自带的返回按钮的运行状态是

onRstart—onStart—onResume(这是出栈的过程)

第三:(半透明定的效果,创建了一个对话框样式activity)

 

点击this is maDialog按钮就会出现这个结果,这是的状态为onPesume暂停状态,这是把它放到了栈里面。再点击手机自带的返回按钮,他回出栈,状态为onResume

2、

package cn.lyhz;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class FirstActivity extends Activity {
    private static final String TAG = "myTest";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG,"onCreate");
       
        Button goB = (Button)findViewById(R.id.goB);
        goB.setOnClickListener(new OnClickListener() {
                   
                    public void onClick(View v) {
                             Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                             startActivity(intent);
                    }
           });
          
        Button showMyDialog = (Button)findViewById(R.id.showMyDialog);
        showMyDialog.setOnClickListener(new View.OnClickListener() {
                   
                    public void onClick(View v) {
                             Intent intent = new Intent(FirstActivity.this,DialogActivity.class);
                             startActivity(intent);
                    }
           });
       
        Button showAlertDialogB = (Button)findViewById(R.id.showAlertDialog);
        showAlertDialogB.setOnClickListener(new View.OnClickListener() {
                   
                    public void onClick(View v) {
                             showAlertDialog();
                             Log.i(TAG,"showAlertDialog");
                    }
           });
    }
   
    public void showAlertDialog(){
    AlertDialog.Builder builder = new Builder(FirstActivity.this);
    builder.setMessage("确认退出么?");
    builder.setTitle("提示");
    builder.setPositiveButton("确定",
                        new android.content.DialogInterface.OnClickListener() {
                   
                    public void onClick(DialogInterface dialog, int which) {
                             dialog.dismiss();
                             FirstActivity.this.finish();
                    }
           });
   
    builder.setNegativeButton("
取消", new android.content.DialogInterface.OnClickListener() {
                   
                    public void onClick(DialogInterface dialog, int which) {
                             dialog.dismiss();
                            
                    }
           });
    builder.create().show();
    }
protected void onDestroy() {
           Log.i(TAG,"onDestroy");
           super.onDestroy();
}
protected void onPause() {
           Log.i(TAG,"onPasume");
           super.onPause();
}
protected void onRestart() {
           Log.i(TAG,"onRestart");
           super.onRestart();
}
protected void onResume() {
           Log.i(TAG,"onResume");
           super.onResume();
}
protected void onStart() {
           Log.i(TAG,"onstrat");
           super.onStart();
}
protected void onStop() {
           Log.i(TAG,"onStop");
           super.onStop();
}
}

创建的真正的对话框点击取消是没有任何反应的(不能触发FirstActivity的状态),而点击确定状态是onPesume—onStop—onDestro


2011年12月11日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值