編輯:關於Android編程
本節學習Activity的狀態保存與恢復。
先用例子開始:
布局文件主要是實現如下,大家自行編寫
Activity邏輯代碼:
public class FiveActivity extends Activity { private Button setButton; private Button getButton; private EditText editText; private float value; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_five); setButton = (Button)findViewById(R.id.button1); getButton = (Button)findViewById(R.id.button2); editText = (EditText)findViewById(R.id.editText1); setButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub value = 1.234f; editText.setText(hello world); } }); getButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String string = editText.getText().toString(); Toast.makeText(FiveActivity.this, string+ +value, 0).show(); } }); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub Log.i(FiveActivity, onSaveInstanceState); super.onSaveInstanceState(outState); } }第一種情況:
當然了,這時候按back按鈕,當再次進入後,會發現輸入框裡沒有內容,同時按get得到為0.0
同時第一種情況中我的打印Log.i(FiveActivity, onSaveInstanceState);始終也是沒有打印
接著第二種情況:
當我們set後,再按get後。 這次不按Back鍵,這次按Home鍵:
當我們按Home鍵後,我們的Activity就處於stop狀態,這時候我們的打印語句出現了
這時候我們手動殺死FiveActivity
這時候在啟動Activity,當再次get時就會發現:
EditText中的文字Hello World依舊存在,而我的Value變量變為0.0了。
總結:
1: 對於第一種情況,Android系統覺得是用戶自願的行為,覺得那就沒有保存的必要了。
2: 對於第二種情況,EditText中的文字存在那是因為Android系統中幾乎對所以的UI都實現了OnSaveInstanceState方法,這是默認的實現。所以當我們Home出去時就會打印出現,至於我們的變量為啥沒有恢復,很明顯那是因為沒人保存它的值,這就得需要我們程序員自己手動保存。
當我們在OnCreate方法中添加:
if(savedInstanceState != null) value = savedInstanceState.getFloat(1234);
protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub Log.i(FiveActivity, onSaveInstanceState); outState.putFloat(1234, value); super.onSaveInstanceState(outState); }
同時, 除系統資源不足時,或者手機的屏幕方向變化時,改變語言時,都會導致Activity重現銷毀,然後重現再創建。這時候如果我們不保存需要保存的數據,也會出現不對的情況。
一、簡介 最近朋友公司需要實現一個垂直上拉下滑的View,該View最初只有一部分顯示在屏幕最下方,上拉那一部分可以將該View全部拉出來並全部顯示在屏幕上,下滑該Vie
這篇博客呢主要是寫gridview的多選以及單選的功能,並且獲取選中的值。首先呢,我做一下聲明,這個小程序呢是我借鑒某位大神的部分代碼,按照自己的需求重新編寫了一下。本來
學習到的知識整個事件流向應該是從Activity—->ViewGroup—>View 從上往下調用dispatchTouchEvent
本文詳細分析了Android中Service服務。分享給大家供大家參考,具體如下:在前面文章《Android中Service服務詳解(一)》中,我們介紹了服務的啟動和停止