了解Android活动的生命周期

169 阅读6分钟

Android活动生命周期提供了在应用程序生命周期中活动实例改变状态时调用哪些方法的细节。在处理活动状态变化时,理解Android活动和片段的生命周期是至关重要的。

掌握Android生命周期将帮助你有效地处理活动状态,防止你的应用程序在活动状态发生变化时出现异常行为,帮助你留住用户,减少对Android应用程序的挫败感。

因此,本教程将教你在Android应用中活动或片段改变状态时调用的所有方法。此外,你还将学习如何适当地处理活动和片段的状态变化。

分析Android活动的生命周期

在Android中,一个活动是一个屏幕,它为应用程序提供了一个显示其用户界面的窗口,并使用户能够与应用程序进行交互。这个活动对由用户或系统触发的不同状态变化做出反应。

例如,当用户在使用应用程序时按下后退按钮,就会发生活动状态变化。当用户按下后退按钮时,这个动作会触发系统停止正在由应用程序进行的所有操作。

程序员可以使用六个回调来处理这些活动状态变化。它们是如下的。

1.onCreate()

Android活动的生命周期从onCreate() 方法开始。当用户点击你的应用程序的图标时,这个方法被调用,从而导致这个方法创建活动。每个活动都需要这个方法,因为它设置了布局。

onCreate() 方法接收了一个Bundle 作为参数。这个Bundle ,活动将使用存储在Bundle 中的数据将自己恢复到之前的状态,像这样。

@Override
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button btnregister = (Button) findViewById(R.id.btnregister);
}

2.onStart()

在视图被初始化并且布局在onCreate() 方法中被设置后,onStart() 方法被调用。这个方法使活动对用户可见。

当用户按下返回按钮并在几秒钟后打开活动时,这个方法也可以由onRestart() 方法触发。只有当活动不可见但没有被系统销毁时,onRestart() 方法才被调用。

@Override
protected void onStart() {
    super.onStart();
    }

3.onResume()

3.在活动对用户可见后,当用户开始与它交互时,onResume() 方法被调用。该活动将继续处于这种状态,直到用户离开该活动。

@Override
protected void onResume() {
    super.onResume();

}

4.onPause()

4.当用户离开当前活动时,系统暂停所有发生在该活动上的操作,并调用onPause() 方法。这个方法也很关键,因为它是用来保存用户在活动上的数据的,因为用户会转移到另一个活动。

因此,在这个方法上实现的任务必须是快速的,以确保应用程序在过渡到另一个活动时不会滞后。

@Override
protected void onPause() {
    super.onPause();
}

5.onStop()

当用户按下后退按钮或导航到另一个活动时,onStop() 方法被调用,因为该活动对用户不再可见。你也可以在这个方法上保存用户的数据。

@Override
protected void onStop() {
    super.onStop();
}

6.onDestroy()

这个方法在系统销毁活动之前被调用。一个活动可能由于配置的改变而被销毁,例如当用户改变设备方向和地域时。

@Override
protected void onDestroy() {
    super.onDestroy();

}

分析片段的生命周期

片段是一个子活动,或一个活动的片段,它有自己的布局和生命周期。片段被用来在一个活动中提供多个屏幕。

onAttach() 方法被调用时,片段通过附加到活动上开始其生命周期。之后,onCreate() 方法被系统用来初始化该片段。

就像在活动生命周期中,OnCreate() 方法也在片段生命周期中初始化片段。唯一不同的是,它不设置布局,系统调用onCreateView() 来绘制片段的用户界面。

在一个片段被成功创建后,它要经过以下几个阶段。

  • 当片段现在对用户可见时,onStart() 方法被调用,然后是onResume() 方法,当片段是交互式的时被调用。
  • 一旦片段不再是交互式的,onPause() 方法就会被调用。使用这个方法来清除硬件资源并保存用户的进度。
  • 当片段不再可见时,onStop() 方法被调用,随后是onDestroy()onDestroyView() 方法,这些方法清理用户界面上需要清理的任何资源。
  • onDetach() 方法结束片段的生命周期,因为片段已经从活动中分离出来。

如何处理活动和片段的状态变化

Android活动生命周期的唯一目的是创建能够处理状态变化并防止应用程序崩溃的方法。即使只需要一个方法(onCreate()),也必须处理活动不可见时释放资源的额外任务,包括onPause()onStop() 方法中的其他最佳实践。

下面的提示显示了为了使应用程序顺利过渡而必须完成的必要任务。

保存用户的进度

现在,用户希望每个应用程序都能保存他们的数据,即使他们不手动保存数据。始终将用户的数据保存在onPause() 方法上。

你可以将数据存储在SQL数据库或云存储平台上,如Firebase的实时存储。但对于较少的数据,你可以使用SharedPreferences进行存储。

下面的代码告诉你如何在onPause() 方法中的SharedPreferences上存储。

@Override
    protected void onPause() {
        super.onPause();

        SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref", MODE_PRIVATE);
        SharedPreferences.Editor myEdit = sharedPreferences.edit();

//use the putString and putInt methods to store the users text.
        myEdit.putString("model", model.getText().toString());
        myEdit.putInt("price", Integer.parseInt(price.getText().toString()));

//save the text by invoking the apply() method
        myEdit.apply();
    }

当应用程序不活动时释放资源

当一个活动停止时,动画必须停止,传感器(硬件资源)必须取消注册,以节省用户的电池寿命。如果不释放它们,就会发生内存泄漏,从而降低系统的性能。

protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
}

在活动生命周期回调上实现的任务和方法,在释放硬件资源和在onPause() 方法上保存你的用户数据时,应该快速而准确。

确保代码在执行任务时是高效的,因为只有在前一个活动完成了onPause() 方法上的所有任务后,下一个活动才会开始。如果onPause() 方法花费的时间太长,那么下一个活动将需要更长的时间来获得焦点。

总结

通过阅读这篇文章,你已经获得了关于Android活动生命周期和片段生命周期以及如何处理活动状态变化的知识。我希望你觉得这篇文章很有用,现在可以通过设计Android应用程序来适当地处理活动状态的变化。

  • 在活动停止时保存用户的数据
  • 在活动被销毁前释放未使用的资源
  • 在活动被创建时绑定数据

如果你想构建高质量的应用程序,掌握Android生命周期是必要的。但掌握Android生命周期不应该是你练习的唯一技能。学习更多关于安卓惯例和最佳实践的知识,也会帮助你编程出高效的方法,使应用程序在活动状态或片段状态之间快速平稳地过渡。

如果你有任何问题或反馈,请在下面的评论区告诉我,我很乐意回复。

The postUnderstanding the Android activity lifecycleappeared first onLogRocket Blog.