Activity的生命周期与加载模式——Activity的生命周期演示

      当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入飞活动状态,也可从非活动状态准入活动状态。

     归纳起来Activity大致会经过如下4个状态。

  • 活动状态:当前Activity位于前台,用户可见,可以获得焦点。
  • 暂停状态:其他Activity位于前台,该Activity依可见,只是不能获得焦点。
  • 停止状态:该Activity不可见,失去焦点。
  • 销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。  

    图4.15(该图示Android官方文档图片)显示了Activity生命周期及相关回调方法。

  图4.15 Activity生命周期及回调方法

  从图4.15可以看出,在Activity的生命周期中,如下方法会被系统回调。

  • onCreate(Bundle savedStatus):创建Activity时被回调。该方法只会被调用一次。
  • onStart():启动Activity时被回调。
  • onRestart():重新启动Activity时被回调。
  • onResume():恢复Activity时被回调,onStart()方法后一定会回调onResume()方法。
  • onPause():暂停Activity时被回调。
  • onStop():停止Activity时被回调。
  • onDestroy():销毁Activity时被回调。该方法只会被调用一次。

   下面的Activity覆盖了上面的7个生命周期的方法,并在每个方法中增加了一行记录日志代码。该Activity的界面布局很简单,一个用于启动一个对话框风格的Activity,另一个用于退出该应用。

布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    >

    <Button
        android:id="@+id/startActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动对话框风格的Activity" />

    <Button
        android:id="@+id/finisth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="退出" />

</LinearLayout>

后台Java代码文件如下:

package com.example.studyactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Lifecycle extends Activity {
    final String TAG="--CrazyIt--";
    Button finish,startActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle);
        //输出日志
        Log.d(TAG,"------------onCreate-----------------");
        finish=(Button)findViewById(R.id.finisth);
        startActivity=(Button)findViewById(R.id.startActivity);
        //为startActivity按钮绑定事件监听器
        startActivity.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(Lifecycle.this,DialogActivity.class);
                startActivity(intent);
            }
        });
        //为finish按钮绑定事件监听器
        finish.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //结束该Activity
                Lifecycle.this.finish();
            }
            
        });

    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        //输出日志
        Log.d(TAG, "------------onStart--------------");
    }

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        //输入日志
        Log.d(TAG,"---------------onRestart-------------");
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        //输入日志
       Log.d(TAG,"---------------onResume-------------");
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        //输入日志
           Log.d(TAG,"---------------onPause-------------");
    }
    
    

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        //输入日志
           Log.d(TAG,"---------------onStop-------------");
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //输入日志
           Log.d(TAG,"---------------onDestroy-------------");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.lifecycle, menu);
        return true;
    }

}
原文地址:https://www.cnblogs.com/wolipengbo/p/3420282.html