<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Activity 生命周期及其棧管理方式

      Activity 生命周期

      Android 系統用棧的形式管理 Activity , 當新的 Activity 被創建是, 會被放置到棧頂, 這個 Activity 會進入到運行狀態, 而前一個 Activity 則會被壓入棧, 直到新的 Activity 退出, 否則不會出現在前臺。

      單個 Activity 的生命周期狀態以及生命周期方法

      根據 Android 文檔, 每一個 Activity 都有四個狀態, 它們分別是:

      • 當 Activity 位于屏幕的最前面(棧頂),稱之為 運行(活動)狀態:
      • 當 Activity 失去焦點, 但是依舊可見, 比如被非全屏的對話框遮住部分, 稱之為 暫停狀態 , 暫停的 Activity 依然是活動的, 但是當系統內存嚴重不足時, 有可能被系統結束;
      • 當 Activity 完全不可見時, 稱之為 停止狀態 , 這時 Activity 依然保持其狀態以及成員信息, 不過由于此時 Activity 對用戶不可見, 當系統其它地方需要內存時, 經常會被結束;
      • 當 Activity 由不可見變成可見時, 稱之為 重啟狀態 , 這時 Activity 必須迅速恢復它以前的狀態。

      下圖表示 Activity 在這四種狀態之間切換的生命周期, 以及狀態切換時調用的對應的方法:

      Activity lifecycle

      Activity 生命周期中的各個方法描述如下:

      • onCreate() 當 Activity 首次創建時調用, 這里通常的工作是創建視圖, 綁定數據到列表等。 這個方法還有一個 Bundle 參數, 如果這個 Activity 之前由凍結的狀態, 這個狀態將包含在里面。 之后, 通常會接著調用 onStart() 方法。
      • onRestart() Activity 已經被停止, 在其被重新開始之前調用。 接下來回調用 onStart() 方法。
      • onStart() 當 Activity 變到用戶可見時調用, 接下來如果 Activity 變成不可見的話, 將會調用 onStop() , 否則將調用 onResume() 。
      • onResume() 當 Activity 開始能和用戶交互時調用, 此時的 Activity 位于棧頂, 接下來通常會調用 onPause() 。
      • onPause() 當系統準備開始一個新的 Activity 或者重置一個已有的 Activity 時調用。 通常需要在這里進行保存數據、 停止動畫以及其它占用 CPU 資源的活動等。 這個方法完成之前, 下一個 Activity 不會繼續, 所以這個方法的必須較快的完成。 接下來如果 Activity 又回到棧頂將調用 onResume() , 如果 Activity 變的不可見, 將調用 onStop() 。
      • onStop() 當 Activity 不可見時調用, 如果 Activity 變的可見, 將會調用 onRestart() , 如果 Activity 將銷毀, 調用 onDestroy() 。
      • onDestroy() 這是 Activity 被銷毀之前最后一次調用, 可能是調用了 Activity 的 finish() 方法, 或者系統要回收資源, 這兩者可以通過 isFinishing() 方法進行區別。

      多個 Activity 的棧管理方式

      多個 Activity 之間采用的是棧道管理方式, 當用戶啟動新的 Activity 時, 新啟動的 Activity 位于棧頂,當用戶按后退按鈕時, 棧頂的 Activity 被推出棧道并銷毀, 如下圖所示:

      Activity Stack Manage

      生命周期測試代碼

      我們在上次創建的程序中添加 Activity 的生命周期代碼, 并加入一些輸出, 以便清晰的理解:

      [Activity(Label = "MyFirstApp", MainLauncher = true)]
      public class MainActivity : Activity {
      	
      	public const string ExtraMessage = "Cn.Beginor.MyFirstApp.MainActivity.ExtraMessage";
      	
      	protected override void OnCreate(Bundle bundle) {
      		base.OnCreate(bundle);
      		/** 其它代碼省略 **/
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnStart() {
      		base.OnStart();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnResume() {
      		base.OnResume();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnPause() {
      		base.OnPause();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnStop() {
      		base.OnStop();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnRestart() {
      		base.OnRestart();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      	}
      
      	protected override void OnDestroy() {
      		base.OnDestroy();
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
      		Android.Util.Log.Debug("Debug", this.GetType().Name + "." + this.IsFinishing);
      	}
      }

      以上是 MainActivity 添加的生命周期代碼, 由于代碼完全一直, 就不在貼出來了。 接下來開始調試, 首先會啟動 MainActivity , 從輸出窗口能看到下面的提示:

      MainActivity.OnCreate
      MainActivity.OnStart
      MainActivity.OnResume

      點擊“發送”按鈕,啟動 SecondActivity ,看到下面的提示:

      MainActivity.OnPause
      SecondActivity.OnCreate
      SecondActivity.OnStart
      SecondActivity.OnResume
      MainActivity.OnStop

      點擊返回按鈕, 返回 MainActivity , 得到的提示如下:

      SecondActivity.OnPause
      MainActivity.OnRestart
      MainActivity.OnStart
      MainActivity.OnResume
      SecondActivity.OnStop
      SecondActivity.OnDestroy
      SecondActivity.IsFinishing = True

      再次點擊“發送”按鈕,啟動 SecondActivity ,看到下面的提示(與第一次是一致的):

      MainActivity.OnPause
      SecondActivity.OnCreate
      SecondActivity.OnStart
      SecondActivity.OnResume
      MainActivity.OnStop

      這時, 如果點擊 Home 按鈕, 會得到下面的提示:

      SecondActivity.OnPause
      SecondActivity.OnStop

      點擊“最近程序”按鈕, 打開 MyFirstApp , 會看到下面的提示:

      SecondActivity.OnRestart
      SecondActivity.OnStart
      SecondActivity.OnResume

      如果在 MainActivity 點擊“返回”按鈕, 應用將會退出, 可以看到下面的提示:

      MainActivity.OnPause
      MainActivity.OnStop
      MainActivity.OnDestroy
      MainActivity.IsFinishing = True

      至此, 整個生命周期測試完成, 有了上面的測試, 應該可以對 Android 的 Activity 生命周期有一個比較清楚的認識。

      posted @ 2012-11-12 19:40  張志敏  閱讀(5369)  評論(7)    收藏  舉報
      主站蜘蛛池模板: 国产成人精品97| 伊人精品成人久久综合97| 虎白女粉嫩尤物福利视频| 亚洲中文字幕一二区日韩| 精品伊人久久久香线蕉| 仪征市| 五月丁香六月狠狠爱综合| 国产粉嫩学生高清专区麻豆| 国产白袜脚足j棉袜在线观看| 麻豆国产va免费精品高清在线| 伊人久久久av老熟妇色| 久久精品国产99久久久古代 | 免费无码国模国产在线观看| 久在线精品视频线观看| 国产精品国三级国产av| 无码人妻精品一区二区三区蜜桃 | 亚洲午夜成人精品电影在线观看 | 中文字幕久久波多野结衣av| 免费日韩av网在线观看| 日本久久香蕉一本一道| 精品国产午夜福利在线观看| 黑人精品一区二区三区不| 国产av第一次处破| 亚洲精品无码久久久影院相关影片| 色婷婷五月综合久久| 日韩女同一区二区三区久久| 国产性三级高清在线观看| 无码国产偷倩在线播放| 亚洲综合一区国产精品| 连江县| 俄罗斯美女真人性做爰| 强插少妇视频一区二区三区| 国产三级国产精品国产专区 | 阳城县| 久色伊人激情文学你懂的| 国产亚洲一区二区三区av| 女同AV在线播放| 欧美高清一区三区在线专区| 国产婷婷综合在线视频中文| 天堂网亚洲综合在线| 性色欲情网站|