下面是关于“Android Activity 横竖屏切换的生命周期”的详细攻略。
目录
前言
当手机横竖屏切换时,为了适配屏幕的变化,应用程序需要做一些相应的处理。同时,横竖屏切换也会涉及到 Activity 的生命周期,需要关注相应的生命周期方法。本文将以实例的方式详细讲解 Android Activity 横竖屏切换的生命周期。
横竖屏切换的原理
当手机横屏或者竖屏时,Android 系统会销毁当前的 Activity,重新创建新的 Activity,并根据横竖屏状态重新渲染界面。Activity 的生命周期在这个过程中也会发生变化,从而得以解决横竖屏界面问题。
生命周期关键方法实现
在 Activity 生命周期中,有两个比较关键的方法需要重写以实现横竖屏切换的处理,分别是 onSaveInstanceState
和 onRestoreInstanceState
。
onSaveInstanceState
onSaveInstanceState
方法会在 Activity 被销毁之前被调用,可以用来保存需要保存的界面状态,如 EditText 中的文字。重写该方法时,需要调用其 super 方法,以保证系统能够保存默认的状态信息。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("text", editText.getText().toString());
}
onRestoreInstanceState
onRestoreInstanceState
方法会在 Activity 被重新创建之后被调用,可以用来恢复保存的界面状态。在重写该方法时,也需要调用其 super 方法以保证能够恢复默认的状态信息。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String text = savedInstanceState.getString("text");
editText.setText(text);
}
需要注意,当屏幕旋转时,Activity 的生命周期会重新开始,因此之前创建的变量或对象会被销毁并重新创建。因此,在实现 Activity 保存和恢复状态时,需要考虑是否需要保存或恢复所有的数据,以及何时恢复数据。
示例说明
接下来将演示两个示例:保存和恢复 Activity 状态、使用 Fragment 解决横竖屏切换问题。
示例一:保存和恢复Activity状态
在这个示例中,我们将通过 EditText 输入框的内容来保存和恢复 Activity 的状态。
public class MainActivity extends AppCompatActivity {
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 text = savedInstanceState.getString("text");
editText.setText(text);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("text", editText.getText().toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String text = savedInstanceState.getString("text");
editText.setText(text);
}
}
在该示例中,重写了 Activity 的 onCreate
、onSaveInstanceState
和 onRestoreInstanceState
方法,并在 onCreate
方法中根据保存的状态恢复了 EditText 的文本。
示例二:使用 Fragment 解决横竖屏切换问题
在这个示例中,我们将使用 Fragment 来解决横竖屏切换的问题。具体来说,我们将使用一个 Fragment 来显示列表,再使用另一个 Fragment 来显示具体内容。当横竖屏切换时,两个 Fragment 都将保持不变。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container1, new ListFragment())
.replace(R.id.container2, new DetailFragment())
.commit();
}
}
}
在该示例中,Activity 的 onCreate
方法中根据 savedInstanceState 判断是否需要重新创建 Fragment。当 savedInstanceState 为 null 时,表示 Fragment 尚未创建过,因此需要创建并添加到指定的容器中。
以上就是关于 Android Activity 横竖屏切换的生命周期的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Activity 横竖屏切换的生命周期 - Python技术站