一、概述
Android的生命周期中有個方法onSaveInstanceState,它可以在Activity被銷毀前保存它的狀態,以便再次啟動時恢復。onSaveInstanceState方法使用Bundle來保存與Activity相關的狀態信息,諸如用戶輸入等。在Activity重新啟動時,可以使用onCreate方法中的Bundle實例恢復狀態。如果您想對Activity進行更改而不會丟失狀態,則應使用onSaveInstanceState方法。
二、什麼時候使用onSaveInstanceState?
在以下情況下使用onSaveInstanceState方法:
- 您需要保存臨時狀態(例如搜索文本框中的內容)。
- 您的應用程序需要保存用戶輸入以進行快速重建。
- 當用戶旋轉設備時, 它可以避免應用程序重新啟動。
三、 onSaveInstanceState 方法中需要設置的值
在onSaveInstanceState的方法中,您需要為Bundle對象中的每個值設置一個String鍵及其對應的值。以下是一些需要在onSaveInstanceState方法中保存的內容:
- EditText中的值:在Input Fields中有很多輸入文本框,如果用戶輸入的文本信息需要保存,那麼在銷毀Activity之前可以把它們的值一一取出保存到onSaveInstanceState方法中。
- ScrollView 位置值:如果有一個ScrollView , 那麼可以通過getScrollY獲取滾動的高度值並且保存.
- ListView位置值:如果Activity包含ListView,我們可以使用以下代碼在 onSaveInstanceState 方法中保存其狀態:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putIntArray("SCROLL_POSITION", new int[]{listView.getFirstVisiblePosition(), listView.getChildAt(0) != null ? listView.getChildAt(0).getTop() : 0}); }
四、onSaveInstanceState 方法如何得到恢復的數據
在恢復狀態時,在Activity的onCreate(或onRestoreInstanceState,如果Bundle被傳遞到該方法)方法中將Bundle作為參數傳遞。可以使用Bundle中的值和它們的相應鍵來獲取保存的狀態。在onCreate方法中,您可以檢查Bundle是否為空,並查找與Activity相關的存儲的狀態信息,例如EditText中設置的文本等。
public class MainActivity extends AppCompatActivity { private static final String KEY_MESSAGE = "KEY_MESSAGE"; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.edit_text); if (savedInstanceState != null) { String message = savedInstanceState.getString(KEY_MESSAGE); if (message != null) { editText.setText(message); } } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_MESSAGE, editText.getText().toString()); } }
五、onSaveInstanceState 方法的注意事項
- 只能在Bundle中保存基本類型,如int,float,String等。這意味著如果要存儲自定義對象,則需要將它們序列化以便存儲在Bundle中。
- 不要在onSaveInstanceState方法中放太多數據。Bundle實例的大小有限制,過多的數據可能會導致應用程序崩潰。
- Bundle是有限制的(一般是 1MB),所以請確保您沒有保存太多的信息。
六、總結
onSaveInstanceState方法時Android應用程序中常用的一種技術。將Activity中的狀態或數據保存在onSaveInstanceState()方法中,以便在設備重新啟動或調用onCreate()方法時能夠恢復。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245525.html