編輯:關於Android編程
activitiy中打開一個Aactivitiy,Aactivitiy會走以下生命周期
onCreate–》onStart–》onResume–》A運行–》發出打開B的intent–》AonPause–》B可見–》AonStop,此時B經歷同樣的生命周期,
等B結束,A再度可見,onRestart–》onStart–》onResume
注意:AonPause之後B可見,為了不影響B界面的顯示,這裡最好不要在A的onPause中做耗時操作,耗時操作可以在onPause中操作,因為此時B已經可見。
一,異常情況下的生命周期
1,資源相關的系統配置發生改變
比如橫豎屏切換,系統資源配置發生了改變,activity會被摧毀並重新創建,因為是異常終止,activity會使用saveInstanceState方法來保存狀態,這個方法在onStop之前,與onPause沒有時序關系,當activitiy重建時,系統會把saveInstanceState保存下來的Bundle對象傳遞給onRestoreInstanceState和onCreate方法,
2,系統內存不足導致低優先級activity被殺死
activity優先級
1,處於前台與用戶交互的activitiy優先級最高,
2,可見但非前台居中,比如彈出的dialog或者顯示的progress使activity無法與用戶交互,但此時activity仍然可見
3,位於後台失去焦點,此時activity處於onStop狀態,優先級最低。
當系統資源不足時,會優先殺死優先級低的activity,由於是異常終止,系統會調用saveInstanceSate和onRestoreInstanceState兩個方法來保存和恢復數據
二,Activity過渡的五中實現
1.使用overridePendingTransition方法實現Activity跳轉動畫
overridePendingTransition方法是Activity中提供的Activity跳轉動畫方法,通過該方法可以實現Activity跳轉時的動畫效果
比如:
Intent intent =newIntent(MainActivity.this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_in_left);
這個函數有兩個參數,一個參數是第一個activity進入時的動畫,另外一個參數則是第二個activity退出時的動畫。
這裡需要特別說明的是,關於overridePendingTransition這個函數,有兩點需要主意
1>.它必需緊挨著startActivity()或者finish()函數之後調用”
2>.它只在android2.0以及以上版本上適用
2、使用style的方式定義Activity的切換動畫
(1)定義Application的theme給主題定義style
(2)定義具體的AppTheme樣式
其中這裡的windowAnimationStyle就是我們定義Activity切換動畫的style。而@anim/slide_in_top就是我們定義的動畫文件,也就是說通過為Appliation設置style,然後為windowAnimationStyle設置動畫文件就可以全局的為Activity的跳轉配置動畫效果。
而在windowAnimationStyle中存在四種動畫:
activityOpenEnterAnimation
用於設置打開新的Activity並進入新的Activity展示的動畫
activityOpenExitAnimation
用於設置打開新的Activity並銷毀之前的Activity展示的動畫
activityCloseEnterAnimation
用於設置關閉當前Activity進入上一個Activity展示的動畫
activityCloseExitAnimation
用於設置關閉當前Activity時展示的動畫
案列中只做了兩種動畫
3.使用ActivityOptions切換動畫實現Activity跳轉動畫
通過overridePendingTransition方法基本上可以滿足我們日常中對Activity跳轉動畫的需求了,但MD風格出來之後,overridePendingTransition這種老舊、生硬的方式怎麼能適合我們的MD風格的App呢?ActivityOptions是google在新的sdk中給我們提供了另外一種Activity的過度動畫。並且提供了兼容包——ActivityOptionsCompat。ActivityOptionsCompat是一個靜態類,提供了相應的Activity跳轉動畫效果,通過其可以實現不少炫酷的動畫效果。
(1)在跳轉的Activity中設置contentFeature
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 設置contentFeature,可使用切換動畫 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); Transition explode = TransitionInflater.from(this).inflateTransition(Android.R.transition.explode); getWindow().setEnterTransition(explode); setContentView(R.layout.activity_three); }
(2)在startActivity執行跳轉邏輯的時候調用startActivity的重寫方法,執行ActivityOptions.makeSceneTransitionAnimation方法
/** * 點擊按鈕,實現Activity的跳轉操作 * 通過Android5.0及以上代碼的方式實現activity的跳轉動畫 */ button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, ThreeActivity.class); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } });
4,使用ActivityOptions之後內置的動畫效果通過style的方式
這種方式其實就是通過style的方式展示和使用ActivityOptions過度動畫,下面是實現通過定義style方式定義過度動畫的步驟:
(1)編寫過度動畫文件
首先我們需要在Application項目res目錄下新建一個transition目錄,然後創建資源文件,然後使用這些系統自帶的過渡動畫效果,這裡設置了過度時長為300ms。
(2)定義style文件,把translation目錄下定義好的資源引用進來
在Application的style文件中添加,並指定過渡動畫效果為我們剛剛定義的過渡動畫文件:
- @transition/activity_explode
- @transition/activity_explode
(3)執行跳轉邏輯
點擊按鈕,實現Activity的跳轉操作 * 通過Android5.0及以上style的方式實現activity的跳轉動畫
button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * 調用ActivityOptions.makeSceneTransitionAnimation實現過度動畫 */ Intent intent = new Intent(MainActivity.this, FourActivity.class); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } });
(五)使用ActivityOptions動畫共享組件的方式實現跳轉Activity動畫
這裡的共享組件動畫效果是指將前面一個Activity的某個子View與後面一個Activity的某個子View之間有過渡效果,即在這種過度效果下實現Activity的跳轉操作。那麼如何實現兩個組件View之間實現過渡效果呢?
(1)定義共享組件
在Activity a中的button按鈕點擊transitionName屬性:
在Activity b的布局文件中為組件定義transitionName屬性,這樣這兩個組件相當於有了過度對應關系,這裡需要注意的是這兩個組件的transitionName屬性的值必須是相同的。
(2)調用startActivity執行跳轉動畫
點擊按鈕,實現Activity的跳轉操作 * 通過Android5.0及以上共享組件的方式實現activity的跳轉動畫
button5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, FiveActivity.class); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, button5, "shareNames").toBundle()); } });
需要說明的是這裡調用的ActivityOptions.makeSceneTransitionAnimation方法,傳遞了三個參數,其中第一個參數為context對象,第二個參數為啟動Activity的共享組件,第三個參數為啟動Activity的共享組件transitionName屬性值。
這樣經過調用之後我們就實現了從Activity a跳轉到Activity b的時候a中的組件到b中組件的過度效果。
過渡動畫總結
overridePendingTransition方法從Android2.0開始,基本上能夠覆蓋我們activity跳轉動畫的需求;
ActivityOptions API是在Android5.0開始的,可以實現一些炫酷的動畫效果,更加符合MD風格;ActivityOptions還可以實現兩個Activity組件之間的過度動畫;
定義Application style的動畫為全局動畫,而在java代碼中設置的是局部動畫
去掉ActionBarandroid:theme="@android:style/Theme.Holo.NoActionBar"actionBar =
本文實例講述了Android列表對話框用法。分享給大家供大家參考。具體如下:main.xml布局文件:<?xml version=1.0 encoding=
在我們現在開發APP過程中,當用戶注冊時,短信驗證是必不可少的操作,這裡我們就是用一個免費的第三方短信驗證SDK-MOP首先看下效果圖 獲取AppKey和AppSecre
玩轉android之Action bar 背景: 在Android3.0之後,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是