Activity、Fragment生命週期---橫豎屏切換的生命週期
先貼出一張大家眾所周知activity流程圖
- onCreate():建立Activity呼叫,用於Activity的初始化,還有個Bundle型別的引數,可以訪問以前儲存的狀態。
- onStart():Activity在螢幕上對使用者可見時呼叫,但還不可與使用者互動
- onRestart():在activity停止後,在再次啟動之前被呼叫。
- onResume():Activity開始和使用者互動的時候呼叫,這時該Activity是在Activity棧的頂部,並接受使用者輸入。
- onPause():Activity被暫停時呼叫,也就是你要對你能看到的這個Activity說byebye的時候呼叫,這裡可以做一些清理和儲存工作
- onStop():Activity被停止或者Activity變成不可見時呼叫
- onDestroy():Activity被從記憶體中移除,一般發生在執行finish方法時或者Android回收記憶體的時候
預想深刻體會生命週期,得需要在實踐中慢慢記憶,寫個簡單的demo,log出每個週期的軌跡算是基本瞭解吧
先看主介面佈局activity_main.xml--點選button跳轉到某個activity
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.screendemo.MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:text="跳轉到下一個aty" /> </RelativeLayout>
MainActivity--主介面程式碼
package com.example.screendemo; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends Activity { @Override public void onAttachedToWindow() { super.onAttachedToWindow(); Log.e("TAG", "onAttachedToWindow"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("TAG", "onCreate"); findViewById(R.id.button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondAty.class)); } }); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); Log.e("TAG", "onPostCreate"); } @Override protected void onStart() { super.onStart(); Log.e("TAG", "onStart"); } @Override protected void onRestart() { super.onRestart(); Log.e("TAG", "onRestart"); } @Override protected void onResume() { super.onResume(); Log.e("TAG", "onResume"); } @Override protected void onPostResume() { super.onPostResume(); Log.e("TAG", "onPostResume"); } @Override protected void onPause() { super.onPause(); Log.e("TAG", "onPause"); } @Override protected void onStop() { super.onStop(); Log.e("TAG", "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.e("TAG", "onDestroy"); } @Override public void onBackPressed() { super.onBackPressed(); Log.e("TAG", "onBackPressed"); } @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); Log.e("TAG", "onDetachedFromWindow"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.e("TAG", "onRestoreInstanceState"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.e("TAG", "onSaveInstanceState"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e("TAG", "onConfigurationChanged"); } }
SecondAty佈局只有一個textView,程式碼直接載入佈局即可---這裡省略了。。。。。。
Log1、在清除快取、殺死程序的前提下,啟動專案:
Log2、啟動專案後,清除Log1日誌,按下回退鍵
Log3、啟動專案後,清除Log1日誌,然後回到桌面,走藍色框---桌面啟動專案,走黑色框
Log4、啟動專案後,清除Log1日誌,然後長按進入任務列表介面,走藍色框---殺掉程序,走onDestroy
Log5、啟動專案後,清除Log1日誌,點選button進入某個Aty,走藍色框,然後點選返回鍵回到主介面,走黑色框
Log6、啟動專案後,清除Log1日誌,鎖屏走藍色框,開屏走黑色框
基本上專案啟動,回退,回到桌面,殺死執行緒,跳轉,鎖屏,開屏都測試了,大家還是在專案中慢慢記憶把
接下來看螢幕旋轉,首先要在手機設定中進行設定可以進行螢幕旋轉操作
1、首先在MainActivity進行屬性設定,螢幕不管如何旋轉,就只支援豎屏,生命週期也不會呼叫
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2、如果去掉 android:screenOrientation="portrait",旋轉螢幕至橫屏
再由橫屏切換會豎螢幕時候
走的流程是一樣的
3、加上這行屬性 android:configChanges="orientation|keyboardHidden"在進行旋轉螢幕--就是多了一個onConfigurationChanged
再由橫屏切換會豎螢幕時候
走的流程是一樣的
啟動模式
singleTask"
檢測要啟動的這個Activity的affinity和當前任務的affinity是否相同,如果相同的話就會把它放入到現有任務當中,如果不同則會去建立一個新的任務。
如果現有任務當中已經存在一個該Activity的例項了,那麼系統就不會再建立一次它的例項,而是會直接呼叫它的onNewIntent()方法
注意這裡我們所說的啟動Activity,都指的是啟動其它應用程式中的Activity,因為"singleTask"模式在預設情況下只有啟動其它程式的Activity才會建立一個新的任務
"singleInstance"
這種啟動模式和"singleTask"有點相似,只不過系統不會向宣告成"singleInstance"的Activity所在的任務當中再新增其它Activity。也就是說,這種Activity所在的任務中始終只會有一個Activity,通過這個Activity再開啟的其它Activity也會被放入到別的任務當中。
使用Intent flags
FLAG_ACTIVITY_NEW_TASK
設定了這個flag,新啟動Activity就會被放置到一個新的任務當中(與"singleTask"有點類似,但不完全一樣),當然這裡討論的仍然還是啟動其它程式中的Activity。這個flag的作用通常是模擬一種Launcher的行為,即列出一推可以啟動的東西,但啟動的每一個Activity都是在執行在自己獨立的任務當中的。
FLAG_ACTIVITY_SINGLE_TOP
設定了這個flag,如果要啟動的Activity在當前任務中已經存在了,並且還處於棧頂的位置,那麼就不會再次建立這個Activity的例項,而是直接呼叫它的onNewIntent()方法。這種flag和在launchMode中指定"singleTop"模式所實現的效果是一樣的。
FLAG_ACTIVITY_CLEAR_TOP
設定了這個flag,如果要啟動的Activity在當前任務中已經存在了,就不會再次建立這個Activity的例項,而是會把這個Activity之上的所有Activity全部關閉掉。比如說,一個任務當中有A、B、C、D四個Activity,然後D呼叫了startActivity()方法來啟動B,並將flag指定成FLAG_ACTIVITY_CLEAR_TOP,那麼此時C和D就會被關閉掉,現在返回棧中就只剩下A和B了。
finishOnTaskLaunch
這個屬性和clearTaskOnLaunch是比較類似的,不過它不是作用於整個任務上的,而是作用於單個Activity上。如果某個Activity將這個屬性設定成true,那麼使用者一旦離開了當前任務,再次返回時這個Activity就會被清除掉。
-----------------------------------------------------------------------fragment生命週期----------------------------------------------------------------------
程式碼預設定位到朋友介面,但是測試程式碼在通訊錄第二個頁面進行的測試。。
1 是初始化進入
2 是點選button,進入enter頁面
3 是關掉enter頁面,回到fragment頁面
4是鎖螢幕
5是開屏
6是回到桌面
7從桌面進入專案
8是啟動多視窗
9是從任務列表進入
10退出
相關推薦
Activity、Fragment生命週期---橫豎屏切換的生命週期
先貼出一張大家眾所周知activity流程圖 onCreate():建立Activity呼叫,用於Activity的初始化,還有個Bundle型別的引數,可以訪問以前儲存的狀態。onStart():Activity在螢幕上對使用者可見時呼叫,但還不可與使用者互動 on
Activit、Fragment的生命週期 及橫豎屏切換的一些問題 及解決方案
Activity 的生命週期: 1.onCreate():表示Activity 正在被建立 第一個方法 載入一些介面佈局檔案,初始化Activity 2.onRestart(): 重新啟動 3.onStart():當前Activity 正在啟動 即將開始 已經可見了。還沒有出現在
Fragment和Activity生命週期以及橫豎屏切換對生命週期的影響
生命週期變化 : 切換到該Fragment 05-21 14:26:35.095: D/FragmentDemo(7649): onAttach 05-21 14:26:35.095: D/FragmentDemo(7649): onCreate 05-21 14:26:35.095: D/Frag
android橫豎屏切換,activity生命週期方法是否會回撥
預設情況下的一個應用,沒有在androidmainfest檔案進行任何設定一切都是預設的情況下,我們當改變了他的orientation時候是會銷燬當前activity,新建一個新的activity public void orien(View view)
fragment橫豎屏切換時生命週期的變化
fragment 啟動 08-24 13:48:54.608 11678-11678/I/TAG: onAttach 08-24 13:48:54.608 11678-11678/I/TAG: onC
Android橫豎屏切換, 手機鎖屏以及按Home鍵和返回鍵時的Activity的生命週期
用手機做了實驗,結果如下: 豎屏切橫屏會呼叫完整的生命週期: 03-09 17:08:35.170: I/MainActivity(14086): MainActivity Paused 03-09 17:08:35.200: I/MainActivity(14086):
橫豎屏切換時重構Activity生命週期的問題---android:configChanges的用法
public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (th
橫豎屏切換時候Activity的生命週期
2、執行Activity,得到如下資訊onCreate-->onStart-->onResume-->3、切換成橫屏時 onConfigurationChanged-->onPause-->onSaveInstanceState-->onStop-->onDestro
淺析Activity橫豎屏切換時的生命週期
1.AndroidManifest沒有設定configChanges屬性豎屏啟動:onCreate -->onStart-->onResume切換橫屏:onPause -->onSaveInstanceState -->onStop -->onD
橫豎屏切換時候Activity的生命週期的總結
曾經遇到過一個面試題,讓你寫出橫屏切換豎屏Activity的生命週期。現在給大家分析一下他切換時具體的生命週期是怎麼樣的: 1、新建一個Activity,並把各個生命週期打印出來 2、執行Activity,得到如下資訊 onCreate--> onStart-
android橫豎屏切換、按home鍵、按返回鍵所觸發的生命週期
程式執行:onCreate()->onStart()->onResume() 按home鍵:onPause()->onSaveInstanceState()->onStop
android-----橫豎屏切換對Activity生命週期的影響
前面我們分析過Activity的生命週期(見:android-----Activity生命週期),但是在現實應用中我們可能會對手機進行橫豎屏切換,那麼這樣的切換對Activity的生命週
橫豎屏切換時activity生命週期變化的總結
activity的生命週期變化想必大家都耳熟能詳,但是橫豎屏切換時activity生命週期變化很多人肯定還很迷糊,最近在網上查詢的資料總結的大都不全面,最後在部落格園上看到一哥們總結的挺好, so,自己也寫了個demo測試了一下,發現橫豎屏切換時activity生命週期不僅
Activity、Fragment、Service、View生命週期
1. Activity 生命週期 onCreate : 該方法是在Activity被建立時回撥,它是生命週期第一個呼叫的方法,我們在建立Activity時一般都需要重寫該方法,然後在該方法中做一些初始化的操作,如通過setContentView設
android 橫豎屏切換的生命週期
如下設定,當橫豎屏切換時,activity的狀態是不會改變的 在manifest中設定該Activity的configChanges為android:configChanges="screenSize|keyboardHidden|orientation" 總結如下:
如何處理Activity橫豎屏切換時 fragment會新增一個被又new一次的現象
當螢幕發生旋轉,Activity發生重新啟動,依附在Activity中的Fragment也會跟著Activity重新建立; 這樣造成當旋轉的時候,本身存在的Fragment會重新啟動,然後當執行Activity的onCreate時,又會再次例項化一個新的Fragment,這
android 橫豎屏切換不重走生命周期
orien man ati nta 系統 生命周期 oar hang andro android在系統配置發生改變時,Activity會被重新創建,但是某些情況下我們希望系統配置改變時不會重新創建Activity,這個時候我們可以給Activity指定相對應的configC
應用橫豎屏切換造成、UI改變 、資料丟失的處理 onConfigurationChanged
我們直接進入主題 應該如何來解決這個問題呢 步驟一 許可權宣告: <uses-permission android:name="android.permission.CHANGE_CONFI
橫豎屏切換Fragment
【1】寫兩個類繼承android.app.Fragment; 【2】在Mainactivity 中獲取視窗大小,判斷橫豎屏進行更換。 FragmentManager 動態注入 protected
給Activity、Fragment設定切換動畫及ViewGroup中子元素出場方式
1、Activity之間切換的動畫 特別提示:Activity之間的切換動畫有很多種方式,這裡僅僅摘抄上文中提到的部落格(http://www.jianshu.com/p/733532041f46 )中的方法,想要學習更多方法可參考這篇部落格(http://blog.csdn.net/q