首页 > 其他分享 >第3天:Android应用组件

第3天:Android应用组件

时间:2024-10-09 23:48:03浏览次数:9  
标签:生命周期 LifecycleActivity called 应用 Activity 组件 日志 Android

第3天:Android应用组件(Kotlin版本)

欢迎来到第3天的Android编程教程!今天我们将深入了解Android应用的四大组件,以及如何管理Activity的生命周期。我们将使用Kotlin来实现示例代码,并学习如何使用Logcat来调试和观察日志。


本章节学习内容代码链接:链接:Android应用组件

课程目标

  • 理解Android的四大应用组件及其作用
  • 掌握Activity的生命周期及其管理
  • 实践创建自定义Activity并观察生命周期方法
  • 学会使用Logcat过滤器查看日志

3.1 Android四大应用组件概述

3.1.1 Activity(活动)

  • 定义:Activity是应用的一个单一屏幕,用户可以在其中执行操作。
  • 作用:提供用户界面,处理用户交互。
  • 示例:登录界面、设置页面、主界面等。

3.1.2 Service(服务)

  • 定义:Service是应用在后台执行长时间运行操作的组件。
  • 作用:执行后台任务,如播放音乐、下载文件等。

3.1.3 Broadcast Receiver(广播接收器)

  • 定义:Broadcast Receiver用于接收和响应系统或应用发送的广播消息。
  • 作用:监听系统事件(如电量低、网络连接变化)或应用内的自定义事件。

3.1.4 Content Provider(内容提供者)

  • 定义:Content Provider用于在应用之间共享数据。
  • 作用:提供标准接口,允许其他应用访问或修改数据。

3.2 Activity生命周期详解

3.2.1 生命周期方法

  • onCreate():Activity创建时调用,用于初始化组件。
  • onStart():Activity对用户可见但未获得焦点时调用。
  • onResume():Activity获得用户焦点并可交互时调用。
  • onPause():系统准备启动或恢复另一个Activity时调用,用于保存数据或释放资源。
  • onStop():Activity不再对用户可见时调用。
  • onDestroy():Activity被销毁前调用。
  • onRestart():Activity从停止状态重新启动时调用。

3.2.2 生命周期图示

onCreate()
    ↓
onStart()
    ↓
onResume()
    ↓
(Activity运行中)
    ↓
onPause()
    ↓
onStop()
    ↓
onDestroy()

3.3 实践实例:自定义Activity并打印生命周期日志

3.3.1 创建自定义Activity

  1. 创建新Activity

    • app/src/main/java/your/package/name/目录下,右键点击选择New > Activity > Empty Activity
    • 命名为LifecycleActivity,点击Finish
  2. 更新AndroidManifest.xml

    确保新创建的Activity已在AndroidManifest.xml中注册。

    <activity android:name=".LifecycleActivity"></activity>
    

3.3.2 添加日志打印

LifecycleActivity.kt中,覆盖各个生命周期方法并添加日志打印。

package com.example.lifecycleactivity

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class LifecycleActivity : AppCompatActivity() {

private val TAG = "LifecycleActivity"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_lifecycle)
Log.d(TAG, "onCreate called")
}

override fun onStart() {
super.onStart()
Log.d(TAG, "onStart called")
}

override fun onResume() {
super.onResume()
Log.d(TAG, "onResume called")
}

override fun onPause() {
super.onPause()
Log.d(TAG, "onPause called")
}

override fun onStop() {
super.onStop()
Log.d(TAG, "onStop called")
}

override fun onRestart() {
super.onRestart()
Log.d(TAG, "onRestart called")
}

override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy called")
}
}

3.3.3 更新布局文件

res/layout/activity_lifecycle.xml中,添加一个按钮用于启动和关闭LifecycleActivity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lifecycle Activity" />
</LinearLayout>

3.3.4 实现按钮点击事件

MainActivity.kt中,添加按钮的点击事件,启动LifecycleActivity

package com.example.lifecycleactivity

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.lifecycleactivity.databinding.ActivityMainBinding // 确保路径正确

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// 使用视图绑定
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

// 设置按钮点击事件
binding.btnStartActivity.setOnClickListener {
val intent = Intent(this, LifecycleActivity::class.java)
startActivity(intent)
}
}
}

3.3.5 运行应用并观察日志

  1. 运行应用

    • 点击Android Studio的运行按钮,选择一个模拟器或真机运行应用。
  2. 启动LifecycleActivity

    • MainActivity中,点击“启动 LifecycleActivity”按钮。
    • 观察日志输出,应该依次打印onCreateonStartonResume
  3. 返回MainActivity

    • 按下返回键或使用手势返回到MainActivity
    • 观察LifecycleActivity中的onPauseonStoponDestroy被调用的日志。

3.3.6 日志输出示例

D/LifecycleActivity: onCreate called
D/LifecycleActivity: onStart called
D/LifecycleActivity: onResume called
// 当返回主界面时
D/LifecycleActivity: onPause called
D/LifecycleActivity: onStop called
D/LifecycleActivity: onDestroy called

3.3.7 分析日志

通过观察日志,你可以清晰地看到Activity在不同状态下调用的生命周期方法。这有助于理解Activity的行为,并在实际开发中合理管理资源和数据。


3.4 Logcat 过滤器设置

在Android Studio中设置Logcat过滤器的步骤如下:

  1. 打开 Logcat

    • 在Android Studio底部工具窗口中点击 Logcat 标签。
  2. 选择应用程序

    • 在Logcat窗口的顶部,有一个下拉菜单,选择你的应用程序包名,以只查看该应用的日志。
  3. 设置日志级别

    • 在下拉菜单中选择日志级别,例如 DebugVerbose,以确保看到所有日志。
  4. 使用搜索框

    • 使用Logcat窗口顶部的搜索框,输入关键字(例如LifecycleActivity)以过滤特定日志。

3.5 课后练习

  1. 扩展LifecycleActivity

    • LifecycleActivity的布局中添加更多UI组件,如TextView和按钮。
    • 在各个生命周期方法中更新TextView的内容,显示当前生命周期状态。
  2. 创建其他组件

    • 尝试创建一个简单的Service,观察其生命周期。
    • 创建一个Broadcast Receiver,监听特定的系统广播(如网络变化)。
  3. 思考与总结

    • 为什么理解Activity的生命周期对应用开发至关重要?
    • 在实际项目中,你会如何利用生命周期方法优化应用性能?

3.6 小结

今天,我们深入了解了Android的四大应用组件及其作用,重点掌握了Activity的生命周期。通过实践创建并观察Activity的生命周期方法,你对应用组件的理解更加深入。这些知识将在后续的开发中为你提供坚实的基础。

继续保持学习的热情,明天我们将探索用户界面和布局的设计与实现!

祝学习愉快!

标签:生命周期,LifecycleActivity,called,应用,Activity,组件,日志,Android
From: https://blog.csdn.net/weixin_41644568/article/details/142752903

相关文章

  • 第2天:熟悉Android Studio补充材料——`MainActivity.kt`解读
    下面是对“第2天:熟悉AndroidStudio”该文学习的更深层次的补充材料,对MainActivity.kt文件的理解。下面对MainActivity.kt文件中每一行进行详细解释:packagecom.example.helloworldappimportandroid.os.Bundleimportandroidx.activity.enableEdgeToEdgeimporta......
  • .NET云原生应用实践(一):从搭建项目框架结构开始
    开篇很早之前就想做一套案例,介绍.NET下如何从零开始搭建一个云原生的应用程序。不过这个话题有点大,会要包含很多内容。我本打算从新建一个ASP.NETCoreWebAPI应用程序开始介绍,但又觉得即便是从零开始,也无法完全涵盖每一个步骤细节,而且很多基础性的东西其实并没有太大的介绍价值......
  • Seata简介;安装seata;应用seata
    一,Seata简介;用来管理分布式事务,由阿里巴巴出品。【1、TC(TransactionCoordinator)-事务协调者】用来维护事务的,包括主事务和分支事务。【2、TM(TransactionManager)-事务管理器】管理事务的,决定了事务什么时候开启,什么时候结束,提交还是回滚。TM用来做提交和回滚......
  • 【Azure Entra ID】使用PowerShell脚本导出Entra ID中指定应用下的所有用户信息
    问题描述在AzureEntraID中,需要导出一个Application下的用户信息,包含User的创建时间。 问题解答可以使用PowerShell脚本来实现,只需要执行如下脚本:Connect-AzureAD-AzureEnvironmentNameAzureChinaCloud$users=Get-AzureADServiceAppRoleAssignment-ObjectId<youra......
  • 探索人们最喜爱的AI工具及其应用影响
    探索人们最喜爱的AI工具及其应用影响在科技飞速发展的时代,人工智能(AI)技术正在改变我们的生活和工作方式。越来越多的人开始使用AI工具来提高效率、简化流程和推动创新。那么,在众多的AI工具中,哪些是人们最喜欢的?它们的实际应用和影响又是什么?本文将探讨一些广受欢迎的AI工具......
  • Python基于uniapp+Android平台的校园论坛交流系统 微信小程序z0c7d
    目录项目介绍具体实现截图开发者工具介绍技术路线解决的思路性能/安全/负载方面开发语言以及框架介绍数据库设计python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取项目介绍校园论坛系统设计的目的是为用户提供失物招领、二手闲置、跑......
  • 【Azure Entra ID】使用PowerShell脚本导出Entra ID中指定应用下的所有用户信息
    问题描述在AzureEntraID中,需要导出一个Application下的用户信息,包含User的创建时间。 问题解答可以使用PowerShell脚本来实现,只需要执行如下脚本:Connect-AzureAD-AzureEnvironmentNameAzureChinaCloud$users=Get-AzureADServiceAppRoleAssignment-ObjectId......
  • 实验2_C语言分支与循环基础应用编程
    实验一#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){intcnt;intrandom_major,random_no;srand(time(NULL));cnt=0;while(cnt<N){......
  • 实验2 C语言分支与与循环基础应用编程——1
    一、实验目的1.能正确使用if语句实现分支结构2.能正确使用while语句、do...while语句实现循环结构3.能在具体问题场景中正确区分、使用continue和break4.能灵活、组合使用c语句编程解决简单应用问题 二、实验准备1.分支语句if和循环语句while、do...while的用法......
  • 实验二 C语言分支与循环基础应用编程
    实验二C语言分支与循环基础应用编程实验任务1——抽学号#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){ intcnt; intrandom_major,random_no; srand(time(NULL));//以当前系统......