# Android Activity 的生命周期

来源:互联网 发布:苏州园区网络托管 编辑:程序博客网 时间:2024/04/30 06:08

Android Activity 的生命周期

我写博客的目的主要是总结一下自己一段时间学到的一些重要的知识点,如果有些地方写的不对,或不妥,欢迎指出:

  • activity生命周期有哪些回调函数
  • 这些回调函数在何时被调用
  • 一个生命周期的实例

首先我们先来看一下android API中的一张生命周期图,这张图就很好的展示了android Activity的生命周期。

android API 中生命周期图

从上图中我们可以看到Activity的生命周期的所有方法。

  • protected void onCreate(){}
  • protected void onStart(){}
  • protected void onResume(){}
  • protected void onPause(){}
  • protected void onRestart(){}
  • protected void onStop(){}
  • protected void onDestroy(){}

当我们第一次启动一个Activity是首先系统会依次调用:onCreate() –>
onStart() –>onResume(); 之后Activity就可以与用户交互。也就是Activity处于可见状态。当用户按下home键,或跳转到其他界面,系统会调用:onPause() –> onStop(); Activity处于不可见状态。此时用户如果再次回到Activity, 则系统会先后调用:onRestart() –> onStart() –> onResume()。若退出当前应用,或Activity被回收则调用:onDestory()。若旋转屏幕时Activity会被重新创建,当前Activity会被销毁然后创建一个横屏的Activity,系统会先后调用:onStop() –> onDestory() –> onCreate() –> onStart() –> onResume()。

为了更好的理解,下面简单的写一个Demo,创建一个LifeCycle的应用,在MainActivity中重写Activity生命周期的7个方法,当生命周期的方法被调用的时候,会在Log打印一句话。

package com.app.mario.lifecycle;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity {    private Button mJumpTo;    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mJumpTo = (Button) findViewById(R.id.jumpTo);        mJumpTo.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this,SecondActivity.class);                startActivity(intent);            }        });        Log.d(TAG,"onCreate() was called");    }    @Override    protected void onStart() {        super.onStart();        Log.d(TAG,"onStart() was called");    }    @Override    protected void onResume() {        super.onResume();        Log.d(TAG, "onResume() was called");    }    @Override    protected void onPause() {        super.onPause();        Log.d(TAG, "onPause() was called");    }    @Override    protected void onStop() {        super.onStop();        Log.d(TAG, "onStop() was called");    }    @Override    protected void onRestart() {        super.onRestart();        Log.d(TAG, "onRestart() was called");    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.d(TAG, "onDestroy() was called");    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

第一次启动时MainActivity
MainActivity

在Logcat中可以看到那些方法被调用了:
Log1
系统依次调用了 onCreate() –> onStart() –> onResume()。

当按下home键时Logcat中可以看到:
Log2
系统先后调用了 onPause() –> onStop()。

再次回到应用中时在Logcat中可以看到:
Log3
系统先后调用了: onRestart() –> onStart() –> onResume()。

当从MainActivity跳转到第二个Activity时Logcat:
Log4
系统先后调用了 onPause() –> onStop()。

当界面旋转过来时:
Land

Logcat:
Log5
系统先后调用了:onPause() –> onStop() –> onDestroy() –> onCreate() –> onStart() –> onResume()。

到此我们就基本上对Activity的生命周期有了一个初步的了解。

0 0
原创粉丝点击