編輯:關於Android編程
Android中啟動一個Activity如果點擊Home鍵該Activity是不會被銷毀的,但是當進行某些操作時某些數據就會丟失,如下:
Java class:
package com.king.activitytest2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText editText;
private Button buttonSet,buttonRead;
//定義一個常量
double pai;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取控件
editText=(EditText)findViewById(R.id.edit1);
buttonSet=(Button) findViewById(R.id.btn_Set);
buttonRead=(Button) findViewById(R.id.btn_Read);
//設置監聽事件
buttonSet.setOnClickListener(this);
buttonRead.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_Set:
editText.setText("圓周率為:");
pai=3.141592654;
break;
case R.id.btn_Read:
String str=editText.getText().toString()+pai;
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
break;
}
}
}
xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <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.king.activitytest2.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="設置" android:id="@+id/btn_Set" android:layout_marginTop="46dp" android:layout_below="@+id/edit1" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="35dp" android:layout_marginStart="35dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="讀取" android:id="@+id/btn_Read" android:layout_alignTop="@+id/btn_Set" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginRight="46dp" android:layout_marginEnd="46dp" /> </RelativeLayout>
這裡在程序中定義了一個double類型的變量,當我們點擊讀取按鈕時會將該變量的值加在後面並顯示,打開程序然後進行操作,一切正常:

我們點擊設置之後將屏幕橫過來,咦,pai跑哪去了?

其實這裡當我們進行橫豎屏切換時,迫於系統機制,該Activity已經被銷毀了。但是為什麼這個頁面還存在呢,這是因為這個銷毀並不是用戶去主動退出,所以Android系統實現了這些狀態的保存功能,但是一些數據達不到被保留的要求,並沒有被保留,就像程序中可憐的pai就被拋棄了!
那我們需要在像這種橫豎屏切換過程中保留數據該如何做呢,這裡我們就需要重寫onSaveInstanceState()方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//將需要保存的數據放入Bundle中
outState.putDouble("pai",pai);
}
保存解決了,那我們如何取出呢?很簡單,只需要在onCreate()方法中判斷其參數是否為null,不為null便將其取出。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//將pai保存
if(savedInstanceState!=null)
pai=savedInstanceState.getDouble("pai");
}
現在我們可以看到屏幕切換之後pai也沒有被銷毀。

以上所述是小編給大家介紹的Activity保存和恢復狀態,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
一起學android之利用回調函數onCreateDialog實現加載對話框
效果圖: 有時候我們需要去做一個Activity啟動時的數據加載對話框,關於對話框的各種實現可以通過一起學android之對話框 Dial
Android基礎筆記(一)
1G - 5G的介紹 Android的操作系統的介紹 Android版本 Android系統的架構 兩種虛擬機的不同 ART模式 模擬器的簡介 SDK目錄 Andro
開源項目circular-progress-button源碼解析
這次我們以circular-progress-button開源項目為案例進行分析,這個開源項目裡涉及到Drawable的使用,所以是一個不錯分析案例。一、項目概述這個項目
Chromium擴展(Extension)通信機制分析
Chromium的Extension由Page和Content Script組成。如果將Extension看作是一個App,那麼Page和Content Script就是