使用 Kotlin 的 Android 应用程序中的 Activity 状态和片段生命周期

168 阅读9分钟

在现代 Android 开发中,活动状态和片段生命周期起着至关重要的作用,影响着实现决策以及最终用户查看和体验的最终输出。 在本文中,我们将回顾这些概念是什么,它们是如何工作的,以及在 Android 应用程序中实现它们的步骤。

要学习本教程,您需要 具备 Kotlin 编程语言的基本知识 以及 安装的Android Studio 或 IntelliJ IDE 。 让我们开始吧!

  • 什么是活动状态?

  • 什么是活动生命周期?

  • 什么是片段生命周期?

  • Activity状态和Fragment生命周期的关系和区别

  • FragmentManager和片段生命周期状态

  • 创建片段并将其添加到 Android 应用程序

什么是活动状态?

。 活动 是指用户可以执行的单个操作 在 Android 开发中,Activity 是一个 Java 类,它具有一些预定义的功能,可以在不同的应用程序状态下触发以执行您想要的任何类型的任务。 该活动还负责创建、销毁和控制应用程序生命周期的其他状态。

。 活动类 处理许多计算细节,例如为您创建一个窗口

在Android中,可以有多个活动,但只有一个 MainActivity,这是应用程序的入口,就像 main()方法开始执行 Java 程序。 当我们调用 MainActivity类,执行开始于 onCreate()方法。

所有活动的子类实现两种方法:

  • onPause:使用户能够暂停与活动的主动交互

  • onCreate:初始化您的活动。 你必须打电话给 setContentView()以编程方式

我们可以在下面的代码片段中表达这一点。 我们使用 onCreate创建或启动活动的方法, super关键字调用超类构造函数,最后, setContentView设置 XML:

package com.example.myfirstandroidapplication
​
import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import android.view.Menu
import android.view.MenuItem
import com.example.myfirstandroidapplication.databinding.ActivityMainBinding
​
class MainActivity : AppCompatActivity() {
​
    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var binding: ActivityMainBinding
​
    override fun onCreate(savedInstanceState: Bundle?) {
        WindowCompat.setDecorFitsSystemWindows(window, false)
        super.onCreate(savedInstanceState)
​
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
​
        setSupportActionBar(binding.toolbar)
​
        val navController = findNavController(R.id.nav\_host\_fragment\_content\_main)
        appBarConfiguration = AppBarConfiguration(navController.graph)
        setupActionBarWithNavController(navController, appBarConfiguration)
​
        binding.fab.setOnClickListener { view ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH\_LONG)
                .setAnchorView(R.id.fab)
                .setAction("Action", null).show()
        }
    }
​
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.menu\_main, menu)
        return true
    }

是指由系统或用户触发的 活动状态 事件,导致活动从一种状态转换到另一种状态。

例如,当用户在应用程序中处于活动状态时,他们通常会在单击主页上的应用程序图标、启动应用程序、然后最终退出应用程序之间进行转换,从而导致状态更改。 这些从一种状态到另一种状态的变化就是所谓的活动状态变化。

什么是活动生命周期?

系统中发生的活动更改在活动堆栈中进行管理。 最新的活动通常放在当前堆栈的顶部,它成为正在运行的活动,而前一个活动在堆栈中保持在它的下方。

。 活动生命周期 是指用户执行的整个活动,从启动应用程序到关闭所有操作 几个活动方法定义了活动的整个生命周期。 一方面, onCreate()是用户启动后应用程序的初始状态。 下面的代码片段显示了 onCreate()方法:

protected void onCreate()

onPause()是当用户即将决定下一行操作时的暂停状态,是退出还是继续使用应用程序:

protected void onPause()

这 onStart()当活动从暂停状态恢复并且对用户可见时调用 state:

protected void onStart()

onDestroy()是当所有活动都关闭时产生的一种状态,从而导致所有操作都关闭:

protected void onDestroy()

onStop()是用户单击主页按钮所产生的状态,这通常会最小化应用程序。 这不应该被误认为是应用程序关闭时:

protected void onStop()

onResume()是在活动停止后重新启动时调用的回调。 此方法的语法如下面的代码片段所示:

protected void onResume()

上面列出的方法与 saveInstanceState()方法来保存活动 UI 状态的配置:

public class Activity extends ApplicationContext {
      protected void onCreate(Bundle savedInstanceState);
​
      protected void onStart();
​
      protected void onRestart();
​
      protected void onResume();
​
      protected void onPause();
​
      protected void onStop();
​
      protected void onDestroy();
  }

什么是片段生命周期?

片段是指活动 UI 的一部分,它允许我们在 Android 应用程序中创建多个屏幕。 在 Android v3.0 中引入了 Fragments,以支持平板电脑等大屏幕上更灵活的 UI 设计。 在撰写本文时,Android 的最新版本 v12.x 包含额外的功能, 例如更具表现力和动态的系统 UI。

我们可以在应用程序中创建多个屏幕的一种方法是将一个片段与另一个片段交换。

活动状态与片段生命周期的关系

活动通常被视为操作系统对应用程序的入口点。 在 Android 应用程序中,活动可以包含多个片段和函数。 这些用作包含 UI 片段的框架,提供围绕该片段的 UI 元素。

虽然活动可以在没有片段的情况下存在,但您不能在没有活动的情况下使用片段。 UI 片段的操作类似于 Activity 布局中的视图。 为此,您必须创建一个子类,如下面的代码所示:

class InfoFragment: Fragment{
@override fun onCreateView(...): View? {
     return inflater.inflate (
      R.layout.fragment\_info,...)
  }
}

上面的代码片段显示了一个可重用的 UI 组件,其中包含扩展片段布局的 UI 逻辑。 虽然大多数 UI 元素都在片段中实现,但操作系统只能打开活动。

请注意,在活动中,您可以通过调用来告诉 Android 要使用哪个布局 setContentView在 onCreate. 在片段中,您必须手动膨胀并在 onCreateView方法,它独立于 onCreate方法。

下面的代码片段进一步强调了这一点:

// Activity 
override fun onCreate(savedInstanceState : Bundle?) {
  super.onCreate(savedInstanceState)
  val binding = DataBindingUtil
  .setContentView<ActivityMainBinding> (
  this, R.layout.activity\_main)
  ...
}
// Fragment
override fun onCreateView (...): View? {
  return inflater.inflate (
  R.layout.fragment\_message,...)
}

虽然活动继承自 context类,片段没有。 您需要使用 context片段中的属性以访问可访问的应用程序数据 context,如字符串或图像。

// Activity 
public class ActivityCompat extends ContextCompat
//Fragment
open class Fragment: componentCallbacks
context!!.getString(R.string.app\_name)
context!!.getDrawable(R.drawable.ic\_launcher\_background

在 Android 中,您可以在不同的活动之间导航。 它们排列在堆栈中,最新的活动位于堆栈跟踪的顶部,称为 back stack.


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


片段有类似的 back stack,但整个堆栈都包含在活动中。 这是由一个名为的类控制的 FragmentManager,我们接下来会回顾。

FragmentManager和片段生命周期状态

在 Android 应用程序开发中, FragmentManager和片段生命周期负责应用程序经历的状态转换。

片段总是以在 INITIALIZED状态。 为了让这个片段在其生命周期的不同状态中转换,必须将它添加到 FragmentManager. 这 FragmentManager确定它的片段应该处于什么状态,并确定片段的最大状态。

就像活动一样,片段也有自己的生命周期。 每当用户与 Android 应用程序交互时,片段会在其生命周期中通过不同的状态进行转换,包括以下内容:

  • INITIALIZED

  • CREATED

  • STARTED

  • RESUMED

  • DESTROYED

然而,了解片段的最好方法是实现它们。

小苹果影视TV,全新追剧直播神器,海量高速秒播解析线路!

创建片段并将其添加到 Android 应用程序

要创建片段,我们将按照以下步骤操作:

  1. 选择 文件 并单击 新建

  2. 单击 片段 和 片段(空白) 从下拉菜单中

  3. 利用 TitleFragment片段名称

  4. 取消选中 创建布局 XML

  5. 取消选中 包含片段工厂方法

  6. 取消选中 包含接口回调

  7. 选择 完成

创建片段后,您必须将片段添加到您的应用程序中。 要添加片段,首先单击 linear布局并从 activity_main.xml布局。 给这个片段一个 fragment id和 android:name到片段类的完整路径。 最后,将布局宽度和高度设置为 match_parent,你很高兴!

结论

在本教程中,我们介绍了使用 Kotlin 编程语言在 Android 应用程序中的活动状态和片段生命周期的一些基本和高级概念。

片段支持模块化和代码重用,允许我们在许多活动中使用相同的列表视图。 它们还有助于为 Android 平板设备构建多窗格界面。 另一方面,活动状态生命周期提供了有关 Android 应用程序在其七个状态中的行为方式的信息。 最后,我们创建了一些片段生命周期示例,比较了它们在活动状态之间的异同。

作为 Android 开发人员,在 Android 应用程序开发过程中始终了解最新的技术版本并遵循最佳实践非常重要。 希望您喜欢这篇文章,如果您有任何问题,请发表评论。 快乐编码!

LogRocket :全面了解您的网络和移动应用程序

LogRocket 是一个前端应用程序监控解决方案,可让您重现问题,就好像它们发生在您自己的浏览器中一样。 无需猜测错误发生的原因,或要求用户提供屏幕截图和日志转储,LogRocket 可让您重播会话以快速了解问题所在。 无论框架如何,它都可以完美地与任何应用程序配合使用,并且具有用于记录来自 Redux、Vuex 和 @ngrx/store 的附加上下文的插件。

除了记录 Redux 操作和状态之外,LogRocket 还记录控制台日志、JavaScript 错误、堆栈跟踪、带有标头 + 正文的网络请求/响应、浏览器元数据和自定义日志。 它还检测 DOM 以记录页面上的 HTML 和 CSS,即使是最复杂的单页和移动应用程序也能重新创建像素完美的视频。

本文转自 blog.csdn.net/weixin_4796…,如有侵权,请联系删除。