当前位置: 代码迷 >> Android >> 【攻占Android (9)】Activity生命周期
  详细解决方案

【攻占Android (9)】Activity生命周期

热度:65   发布时间:2016-04-27 23:49:13.0
【攻克Android (9)】Activity生命周期

一、Activity生命周期

        1. Activity(活动)

        活动是 Android 应用框架中的一个核心组件,它在一个窗口(Window)对象中绘制用户接口并响应用户的交互。

        一个应用中通常包含多个活动,用户在不同的活动中执行不同的操作,但只有一个处于“活跃”状态:启动一个新的活动,前一个就会停止并被压入一个栈中。

        2. Activity生命周期



        创建一个活动,通常直接继承 Activity,并在子类中重写一系列的回调方法;在活动状态发生改变时,这些方法由应用框架按照特定的顺序调用,我们称其为活动的生命周期。



        根据活动的复杂度,也许并不需要实现所有生命周期中的方法,但需要知道每个方法的功能,确保你的应用能像用户期望的那样执行:

        不会因为来电话或切换到其他应用而崩溃;
        用户离开应用一段时间后返回,不会丢失进度;
        用户设备屏幕旋转时,不会丢失进度或崩溃;
        GPS 或其他传感器在不需要时不要一直消耗电量。

        该周期按照执行的时间顺序可划分为:
        (1)完全生命周期
        (2)可见生命周期
        (3)前台生命周期

        (1)完全生命周期





        (2)可见生命周期





        (3)前台生命周期





        保存活动状态:

        在系统内存不足时,系统会把处于暂停或停止状态的活动销毁;当用户要再次回到已被销毁的活动时,系统会重新创建该活动。此时,会回调以下方法:

        onSaveInstanceState(Bundle savedInstanceState)
        onRestoreInstanceState(Bundle savedInstanceState)



        3. 活动的任务栈



        4. 在手机上看到Activity生命周期:

        在 MainActivity 中创建以下的Activity生命周期中的方法(MainActivity 中右键 -> Generate -> Override Methods...):



 package com.xiangdong.lifecycle;      import android.app.Activity;   import android.os.Bundle;   import android.util.Log;   import android.view.Menu;   import android.view.MenuItem;         public class MainActivity extends Activity {          //创建标记常量       private static final String TAG = "MainActivity";          @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           Log.v(TAG, "onCreate()");           setContentView(R.layout.activity_main);       }          @Override       protected void onStart() {           super.onStart();           Log.v(TAG, "onStart()");       }          @Override       protected void onResume() {           super.onResume();           Log.v(TAG, "onResume()");       }          @Override       protected void onRestart() {           super.onRestart();           Log.v(TAG, "onRestart()");       }          @Override       protected void onStop() {           super.onStop();           Log.v(TAG, "onStop()");       }          @Override       protected void onDestroy() {           super.onDestroy();           Log.v(TAG, "onDestroy()");       }          @Override       protected void onPause() {           super.onPause();           Log.v(TAG, "onPause()");       }          @Override       protected void onSaveInstanceState(Bundle outState) {           super.onSaveInstanceState(outState);           Log.v(TAG,"onSaveInstanceState()");       }          @Override       protected void onRestoreInstanceState(Bundle savedInstanceState) {           super.onRestoreInstanceState(savedInstanceState);           Log.v(TAG, "onRestoreInstanceState()");       }          //  以下代码不做更改------------------------------------------------------------------       @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);       }   }


        这些类中用到了Log日志输出。

        将项目部署到手机上,通过打开项目、退出项目等多种操作,可看到Activity生命周期的过程。

  相关解决方案