`
XiangdongLee
  • 浏览: 86782 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【攻克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. 活动的任务栈

        (1)



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

        (2)Task:任务



        当我们需要一个Activity可以启动另一个Activity,可能另外一个Activity是定义在不同应用程序中的Activity。

        Android通过将这两个Activity保存在同一个Task里来实现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。 它将相关的Activity组合在一起,以stack的方式管理(就是前面提到的Activity Stack),这就是Task。

        每一个Task有自己的Activity栈(Activity Stack)。


        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生命周期的过程。
  • 大小: 80.7 KB
  • 大小: 109.1 KB
  • 大小: 76.6 KB
  • 大小: 44.7 KB
  • 大小: 79.1 KB
  • 大小: 40.4 KB
  • 大小: 73.4 KB
  • 大小: 31.7 KB
  • 大小: 45 KB
  • 大小: 54.9 KB
  • 大小: 110 KB
  • 大小: 166.6 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics