編輯:關於Android編程
1. 從打開應用到按後退鍵
打開應用
onCreate() 方法執行! 不可見
onStart() 方法執行! 可見
onResume() 方法執行! 可見&在前台
按下後退鍵
onPause() 方法執行! 可見
onStop() 方法執行! 不可見
onDestroy() 方法執行!不可見
2. 從打開應用到按主屏幕鍵 再到重新打開應用
打開應用
onCreate() 方法執行!
onStart() 方法執行!
onResume() 方法執行!
按下主屏幕鍵
onPause() 方法執行!
onStop() 方法執行!
重新打開應用
onRestart() 方法執行!
onStart() 方法執行!
onResume() 方法執行!
Activity在onPause() 和 onStop()後都可能由於內存不足等原因被殺死從而當用戶重新打開app時會重新執行onCreat()方法。 onPause()方法在app被其他app覆蓋時會執行,如果短時間內重新回到前面,則會執行onResume()方法。如果長時間不可見的話則會執行onStop()方法。
3. 橫豎屏切換問題
通過橫豎屏切換時發現,Activity的生命周期的變化如下:
onPause() 方法執行!
onStop() 方法執行!
onDestroy() 方法執行!
onCreate() 方法執行!
onStart() 方法執行!
onResume() 方法執行!
是把當前的Activity銷毀後重新創建
在res目錄下新建layout-land文件夾,裡面放的是Activity橫屏時顯示的布局,名字要與layout文件夾下的文件名字一樣。
設備旋轉前保存數據:
重載onSaveInstanceState()方法
onPause() 方法執行!
onStop() 方法執行!
onSavaInstanceState(Bundle) 方法執行
onDestroy() 方法執行!
onCreate() 方法執行!
onStart() 方法執行!
onResume() 方法執行!
方法onSavaInstanceState()默認的實現要求所有activity的視圖將自身狀態數據保存在Bundle對象中。在重新執行onCreat()方法時會傳入Bundle對象。
onCreate() 方法執行! /**首次打開app**/
Bundle對象為空
onStart() 方法執行!
onResume() 方法執行!
onPause() 方法執行! /**旋轉手機屏幕**/
onSaveInstanceState() 方法執行!
onStop() 方法執行!
onDestroy() 方法執行!
onCreate() 方法執行!
Bundle對象獲取到的myInfo的值:hahaha
onStart() 方法執行!
onResume() 方法執行!
當旋轉手機屏幕並重新執行onCreat()方法後在onSaveInstanceState()中向Bundle保存的值傳了過去。
那麼有個問題,onSaveInstanceState()這個方法什麼時候會執行?一定會在onPause()和onStop()之間執行麼?
答案:onSaveInstanceState()這個方法不一定都會執行,當用戶按下後退鍵時,代表了不再需要這個Activity了,這時候就沒有必要執行這個方法了。但是,如果用戶按下主屏幕鍵或者這個Activity轉為後台運行時,這個時候需要保存信息,這個方法會執行。
onRestart() 方法執行! /**打開app**/
onStart() 方法執行!
onResume() 方法執行!
onPause() 方法執行! /**按下後退鍵**/
onStop() 方法執行!
onDestroy() 方法執行!
onCreate() 方法執行! /**打開app**/
Bundle對象為空
onStart() 方法執行!
onResume() 方法執行!
onPause() 方法執行! /**按下主屏幕鍵**/
onSaveInstanceState() 方法執行!
onStop() 方法執行!
用戶離開當前activity管理的用戶界面,或Android需要回收內存時,activity也會被銷毀。
不過Android從不會為了回收內存而去銷毀正在運行的activity。activity只有在暫停或者停止狀態下才可能被銷毀。此時就會調用onSaveInstanceState()方法。
調用這個方法時,用戶數據會被保存在Bundle對象中。然後操作系統將Bundle對象放入activity記錄中。
activity暫存後,Activity對象不再存在,但操作系統會將activity記錄保存起來。在需要回復activity時,操作系統可以使用暫存的activity記錄重新激活activity。
常見的做法是覆蓋onSaveInstanceState()方法把數據保存在Bundle對象中,覆蓋onPause()方法處理其他需要處理的事情。
那麼暫存的activity記錄可以保存多久?用戶按下後退鍵後,系統會徹底銷毀當前的activity。activity記錄也會被清除。系統重啟或長時間不適用這個activity時,記錄也會被刪除。
測試代碼:
package com.ashzheng.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("info", "onCreate() 方法執行!");
if(null != savedInstanceState){
Log.d("info", "Bundle對象獲取到的myInfo的值:" + savedInstanceState.getString("myInfo"));
}else{
Log.d("info", "Bundle對象為空");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("info", "onDestroy() 方法執行!");
}
@Override
protected void onPause() {
super.onPause();
Log.d("info", "onPause() 方法執行!");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("info", "onRestart() 方法執行!");
}
@Override
protected void onStart() {
super.onStart();
Log.d("info", "onStart() 方法執行!");
}
@Override
protected void onStop() {
super.onStop();
Log.d("info", "onStop() 方法執行!");
}
@Override
protected void onResume() {
super.onResume();
Log.d("info", "onResume() 方法執行!");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("myInfo", "hahaha");
Log.d("info", "onSaveInstanceState() 方法執行!");
}
}
矩形碰撞 原理: 兩個矩形位置的四種情況,不是這四種情況則碰撞 圓形碰撞 原理: 利用兩個圓心之間的距離進行判定.當兩個圓心的距離小於半徑之和則碰撞.像素碰撞 :不適用
本文目標在於指導新手,文章順序如下:Android Studio新手–>下載安裝配置–>零基礎入門–>基本使用&nd
本文實例為大家分享了android wheel省市縣三級聯動效果,供大家參考,具體內容如下在github上面有一個叫做 Android-wheel 的開源控件, 代碼地址
如果移動設備的天下,無論是網購,看新聞等等,都在手機上完成,那麼我們在手機版的微信公眾號上看到好的視頻下載到手機上呢?微信公眾號上的視頻怎麼下載到本地呢?下