編輯:關於Android編程
學習Activity的生命周期,我們知道,當Activity進入到paused或者stopped狀態後,這個Activity的狀態仍然保存著。因為這個Activity對象仍然保存在內存中,它的所有信息和狀態仍然是存在的,當這個Activity再次返回到前台是,它仍然保持著離開時候的樣子。
然而,如果Activity進入到了後台,系統為了回收內存,有可能會去銷毀該Activity,那麼,當用戶通過導航返回的時候,系統就不能簡單的去恢復這個Activity,而是會重新創建這個Activity對象。但是對於普通用戶來說,他並不知道系統銷毀了Activity並重新創建它,因此,可能希望該Activity保存和他離開時候一樣的狀態。
在這種情況下,您可以通過回調方法onSaveInstanceState()來保存Activity的一些重要信息,並通過onCreate()或者onRestoreInstanceState()回調方法來恢復這些信息。
過程如下圖:
注意:並不是每一次Activity銷毀,系統都回去回調onSaveInstanceState()方法,我們是我們自己finish掉該Activity,那麼onSaveInstanceState()方法就不會被調用。
並且系統調用onSaveInstanceState()方法的時機一般是在onStop()之前,但是也有可能是onPause之前。
並且系統調用onRestoreInstanceState()的時機,是在onStart()之後,onResume之前。
盡管系統幫我們實現了UI組建的自動保存和恢復,但是有時候也需要去保存和恢復一些其他的成員變量。在這種情況下,記得重寫onSaveInstanceState()和onRestoreInstanceState()方法是,記得帶上super方法的實現,因為那裡就是系統UI組件自動保存和恢復的默認實現。
注意:因為onSaveInstnceState()方法並不是Activity銷毀前一定被執行,所以你最好僅僅保存與Activity狀態相關的信息(UI狀態)。你不應該去保存那些持久化的數據,那些持久化的數據應該放到onPause方法裡面去執行(比如將數據存儲到數據庫中)。
onSaveInstanceState() 只有在系統即將要自動清理銷毀Activity或Fragment前才會調用,
換句話說:你自己finish,他肯定不會調用的,必須是系統自己觸發的,
比如
1, 由於重力感應 手機從豎屏變為橫屏,
2, 手機點擊Home鍵和長按Home鍵
3, 點擊電源鍵鎖屏時
4, 從當前Activity跳到另一個Activity
5, 應用內存不足即將自動銷毀時
2.onSaveInstanceState他保存的數據是持有化的,還是永久性的呢 onSaveInstanceState()這個方法適合臨時保存一些非永久性的數據.如果要持久化保存數據,就要將操作放在onStop(), onDestroy()這些方法中去 這樣來看onSaveInstanceState()的作用就是: onSaveInstanceState()適合的是當前Activity或者Fragment一旦被系統自己銷毀,應用還能在這之前保存一些必要的數據, 並且用戶的操作很快又回到當前這個頁面,這個時候數據並沒有丟失,還能最大程度的恢復之前狀態.這就是這個方法最大的意義 3.怎麼復寫的問題,也就是怎麼自己保存自己的數據了,使用的是bundle模式,也即是key-value模式了 因為在android的設計中中,這個函數的主要的作用是用來保存UI狀態的,現在怎麼去保存一些自己的數據呢 保存:@Override public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); String content = etCon.getText().toString(); outState.putString("inputCon", content); }取出來:
@Override public void onViewStateRestored(Bundle savedInstanceState){ super.onViewStateRestored(savedInstanceState); //恢復之前輸入框的內容 if(savedInstanceState != null){ etCon.setText(savedInstanceState.getString("inputCon", "")); } }狀態保存主要的使用除了橫豎屏切換,在 fragment替換的時候可以用來解決花屏的問題。
Bitmap bitmap1; Bitmap bitmap2; Bitmap bitmap3 = Bitmap.createBitmap(bitmap1.getWidth
1.view的滑動,六種滑動方式:一:通過layout來實現滑動效果package com.example.testdragview;import android.con
一:在Android程序開發中,我們經常會去用到Shape這個東西去定義各種各樣的形狀,首先我們了解一下Shape下面有哪些標簽,都代表什麼意思:(1).solid:填充
源碼下載 之前用zxing做開發,各種奇葩問題,橫屏修等等,而且性能也不搞。被測試批了,沒辦法後來換了zbar。性能好多了。 直接上圖,看看效果 2.界面上的