Activity的生命周期

Activity

注:生命周期的状态切换只存在于activity内部对象之间。

1、              是应用程序的入口

2、              负责创建窗口,用户交互等

3、              一个程序可能有多个activity

使用方法:继承自android.app.Activity

          Override onCreate()

          setContentView()显示视图

          findViewByld()实例化组件

          androidManifest.xml—>application标签里声明

          指定程序运行时首先家在的Activity,定义action和category

 

Activity的生命周期

Activity有三种状态,分别为:

运行状态:当activity在屏幕的最前端(位于当前堆栈的顶部)它是可见的有焦点的,可以用力进行用户的操作(点击,双击,长按等),那么就叫做激活或者运行状态。值得注意的是,当activity处于运行状态的时候,android会尽可能的保持它的运行,即使出现内存不足等情况,android也会先杀死堆栈底部的activity,来确保运行状态的activity正常运行。

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

注:不是所有的activity失去焦点就会进入暂停状态。

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

生命周期事件:activity状态的变化是人为操作的,而这些状态的改变,也会触发一些事件。我们且叫他的生命周期事件一共有七个。如图:

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就处于了运行状态。

 

接下来看看在各种情况下的状态转换:

第一:

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—onDestroy

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值