2023年Android开发者路线-第2部分

news2024/11/27 23:41:43

Android roadmap
2023年Android开发者路线-第1部分

2023年Android开发者路线-第2部分

2023年Android开发者路线-第3部分

2023年Android开发者路线-第4部分

2023Android开发者路线-第2部分

在上一篇文章中,我们讨论了 Android 架构的重要元素,包括主要的 Android 语言、操作系统、Android 平台和 App Manifest。
在第2部分中,我们将介绍 Android 路线图的接下来的三个部分:

  1. 应用组件
  2. 意图
  3. 应用入口点

应用组件

Android components
在 Android 开发中,应用程序组件就像允许系统和用户与您的应用程序交互的入口点。每个组件都有一个独特的功能和生命周期,决定了它是如何创建和销毁的。

让我们讨论每个组件:

Activity

Activity 是一个独立且可重用的组件,它通过提供与 UI 相关的资源与用户进行交互。所有 Android 应用程序必须至少有一个 Activity 才能进入应用程序并与用户交互。

Activity Lifecycle
所有活动都有自己的生命周期,这是管理活动和资源的重要概念。Activity类提供一组核心回调方法,用于告知活动生命周期状态已更改。

回调方法将按照下图中所示的生命周期顺序调用:
Activity Lifecycle
您可以声明活动的行为方式并使用生命周期回调方法有效地管理您的资源。在本节中,我们将讨论以下六个核心回调方法:

  • onCreate():当系统创建您的活动时调用此回调。大多数在 Activity 的生命周期中应该只发生一次的初始化逻辑应该放在此处(例如创建视图或绑定数据)。
  • onStart():当活动对用户可见时调用方法后调用此回调。如果您在多个 Activity 或应用程序之间切换,这可能会发生不止一次。
  • onResume():这意味着活动已准备好进入前台并与用户交互。
  • onPause():这意味着活动不再在前台,并且可能仍然部分可见(例如,如果用户处于多窗口模式)。在大多数情况下,它表明用户正在离开活动,活动将进入下一个状态。
  • onStop():当活动不再对用户可见时调用此回调。如果您在多个 Activity 或应用程序之间切换,这可能会发生不止一次。
  • onDestroy():在销毁活动之前调用此回调。当活动结束或系统由于配置更改而暂时销毁活动时,系统将调用此回调。当您需要释放或关闭所有剩余资源并允许垃圾收集器收回所有分配的内存时,可以使用此回调。

垃圾回收:https://en.wikipedia.org/wiki/Garbage-first_collector
有关更多详细信息,请查看活动生命周期。
生命周期:https://developer.android.com/guide/components/activities/activity-lifecycle

创建Activity
要创建活动,您必须创建一个类作为Activity类的子类。在现代 Android 开发中,Jetpack库提供高级 Activity 类,例如AppCompatActivity、FragmentActivity和ComponentActivity,以支持与Themes、Fragments等的兼容性。您可以使用以下代码创建基本活动:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

要让您的应用使用 Activity,您必须在App Manifest中声明它们,如以下示例所示:

<manifest ... >
  <application ... >
      <activity android:name=".MainActivity" />
      ...
  </application ... >
  ...
</manifest >

Service

服务是一个入口点,旨在为远程进程执行功能并在后台运行长时间运行的操作,例如音乐播放器或 Youtube 视频播放器。

Service生命周期
服务有自己专用的生命周期,并提供两种类型告诉系统如何启动和管理服务:

  • startService :另一个组件可以通过调用startService()来运行服务。该服务将在后台运行,另一个组件也可以通过调用stopService()来停止该服务。
  • bindService :另一个组件或客户端可以通过调用bindService()来运行服务。该bindService()函数提供了一个IBinder接口,它允许客户端与服务进行一致的通信。该服务将在后台运行。另一个组件或客户端也可以通过调用unbindService取消连接。
    如下图所示,服务的生命周期取决于它的创建方式:
    Service Lifecycle
    根据Android 文档,上图“将bindService()创建的服务与startService()创建的服务分开”,但无论服务如何启动,它们都可能允许客户端绑定到它们。

创建Service
要创建服务,您必须创建一个类作为Service类的子类,如下例所示:

class MyService : Service() {

    private var binder: IBinder? = null

    override fun onCreate() {
        // The service is being created
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        return super.onStartCommand(
            intent,
            flags,
            startId
        ) // indicates how to behave if the service is killed
    }

    override fun onBind(intent: Intent?): IBinder? {
        // A client is binding to the service with bindService()
        return binder
    }

    override fun onDestroy() {
        // The service is no longer used and is being destroyed
    }
}

接下来,为了让您的应用能够使用该服务,您必须在App Manifest中声明它:

<manifest ... >
  <application ... >
      <service android:name=".MyService" />
      ...
  </application ... >
  ...
</manifest >

Android组件之Service:https://developer.android.com/reference/android/app/Service

BroadcastReceiver

Broadcast receiver 是一个可注册的侦听器,它侦听来自 Android 系统和其他 Android 应用程序的广播消息。根据Android 文档,广播用于跨应用程序和正常用户流之外发送消息,例如系统启动或设备开始充电时。

与活动和服务不同,广播接收器没有专门的生命周期。相反,它将监听所有分配的事件消息,直到取消注册。

创建BroadcastReceiver

要创建广播接收器,您必须创建一个类作为广播接收器类的子类,如下例所示:

class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        // do something
    }
}

接下来,为了让您的应用能够使用该服务,您必须在App Manifest中声明它:

<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

ContentProvider

内容提供者管理如何访问您的应用程序的数据以及如何与其他应用程序共享数据。根据Android 文档,内容提供程序使您的应用程序能够共享任何类型的持久数据,无论是存储在文件系统、SQLite数据库、Jetpack Room还是网络上。

内容提供商通过要求特定权限来保护数据。如果请求应用程序没有所需的权限,则它无法查询内容提供者的数据。
contentProvider

ContentProvider: https://developer.android.com/reference/android/content/ContentProvider

Intent

Intent
Intent是对稍后将要执行的动作的抽象描述。例如,它允许您触发应用程序组件的入口点或向广播接收器发送消息。

Intent的用例

  • 启动Activity:您可以通过将意图传递给startActivity()方法来启动新活动。意图定义活动的行为并提供应该在新活动中使用的必要数据。
  • 启动Service:您可以通过将意图传递给startService()方法来运行新服务。意图定义服务的行为并提供应该在新服务中使用的必要数据。
  • 将消息传递给BroadcastReceiver:您可以通过将意图传递给sendBroadcast()sendOrderedBroadcast()方法来将消息传递给广播接收器。您可以将意图作为广播消息从其他应用程序组件传递到您的应用程序或其他应用程序。

Intent类型
有两种类型的意图:

  • 显式Intent:显式意图包括指定的信息,它们指向一个应用程序的包名或完全限定的组件类名。例如,您可以使用包含显式目标类或包信息的意图来启动Activity/Service或向Broadcast Receiver发送消息。
  • 隐式Intent:隐式意图不包括指定的目标信息,而是声明要执行的一般操作。例如,如果您想在图库中向用户显示图像或在Web浏览器中打开URL,可以使用隐式意图请求Android系统执行操作。然后,Android系统会搜索所有安装的应用程序以查找意图过滤器,并将适当的组件与启动隐式意图进行比较。如果Android系统找到了一个适当的组件,它将显示可用的组件列表,但如果找不到,您无法执行隐式意图。

Intent

关于Intent的更多内容:https://developer.android.com/guide/components/intents-filters

App Entry Points

App Entry Points
Android 中有两个基本的应用程序入口点——活动和应用程序快捷方式。

Activity的状态变化:https://developer.android.com/guide/components/activities/state-changes
任务栈及回退栈:https://developer.android.com/guide/components/activities/tasks-and-back-stack
parcelables及bundles:https://developer.android.com/guide/components/activities/parcelables-and-bundles

应用程序快捷方式
应用程序快捷方式允许您在应用程序中启动特定操作。您可以通过长按应用程序图标来显示快捷方式,也可以通过单击列表中的项目来启动任务,如下图所示:
应用快捷方式
快捷方式分为三种类型:

  • 静态快捷方式:静态快捷方式提供指向应用内一致操作的链接并执行静态任务,这些任务不依赖于用户上下文。例如:显示最近的消息、撰写帖子或搜索关键字。
  • 动态快捷方式:动态快捷方式提供指向特定操作的链接,这些操作基于应用内的用户上下文。例如:向特定人员发送消息或导航至特定位置。
  • 固定快捷方式:固定快捷方式(Android 8.0 及更高版本支持)允许您将快捷方式固定到受支持的启动器上。您可以通过单击主屏幕上固定的快捷方式来运行特定任务。
    我们讨论了三种类型的快捷方式。在下一节中,您将介绍如何创建静态快捷方式。

创建静态快捷方式
要创建静态快捷方式,首先创建一个新的资源文件res/xml/shortcuts.xml

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <shortcut
    android:shortcutId="message"
    android:enabled="true"
    android:icon="@drawable/ic_message"
    android:shortcutShortLabel="@string/short_label"
    android:shortcutLongLabel="@string/long_label"
    android:shortcutDisabledMessage="@string/message_shortcut_disabled">
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.example.myapplication"
      android:targetClass="com.example.myapplication.ComposeActivity" />
    <categories android:name="android.shortcut.conversation" />
    <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
  </shortcut>
</shortcuts>

接下来,为了让您的应用能够显示快捷方式,您必须在应用清单中声明它,如下例所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="io.getstream.example">
  <application ... >
    <activity android:name="Main">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      
      <meta-data android:name="android.app.shortcuts"
                 android:resource="@xml/shortcuts" /> 
    </activity>
  </application>
</manifest>

结论

本节介绍了 App 组件、生命周期和 App 入口点的重要部分,以便您更好地了解 Android 组件及其生命周期的工作原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索iOS之AVFoundation框架

AVFoundation框架的业务层主要是AVKit和UIKit&#xff0c;内核层包括CoreVideo、CoreAudio、CoreMedia、VideoToolBox等。AVFoundation作为iOS的音视频框架&#xff0c;提供音视频播放、录制、编辑、编解码、音效设置等。接下来&#xff0c;让我们看一下整体的框架图。 一、AVK…

ANR基础篇 - Trace.txt文件分析

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、trace.txt文件示例二、日志分析2.1 CPU 负载2.2 内存信息2.3 堆栈信息schedst…

Mybatis 案例

文章目录 Mybatis 案例一、 准备工作1.1 数据库表1.2 Restfull规范1.3 封装结果类1.4 实体类 二、部门管理2.1 查询全部部门信息2.2 删除部门2.3 新增部门 三、员工管理3.1 分页查询3.2 分页查询 - PageHelper插件3.3 分页查询 - 条件查询3.4 批量删除员工3.5 新增员工3.6 修改…

蓝桥杯模块学习3——蜂鸣器与继电器

第一章 硬件部分 1.1 电路的组成部分 1.1.1 译码器和锁存器 具体可回顾之前LED灯的文章&#xff1a; https://blog.csdn.net/weixin_63568691/article/details/130660096 1.1.2 ULN2003达林顿管 原理图&#xff1a; 功能&#xff1a; &#xff08;1&#xff09;改变电路特性…

使用Spring初始化器创建Spring Boot项目

注&#xff1a;初始化向导需要联网创建Spring Boot项目 new project 项目创建完成 resources 文件夹中目录结构&#xff1a; static &#xff1a;保存所有的静态资文件&#xff0c; js css images templates &#xff1a;保存所有的模板页面&#xff08;Spring Boot默认j…

python3 爬虫相关学习1:安装requests模块

目录 1 安装前&#xff1a;避免python2 python3 引起的问题 2 如何安装python3 2.1 直接上python3 官网下载 2.2 或者windows的话&#xff0c;microsoft store 里也可以下载 2.3 查看python版本 3 安装requests模块 3.1 很可能安装requests模块之前会遇到报错&#xff…

linux0.12-8-11-vsprintf.c

[383页] 1、 这一小节可以不看代码如何实现&#xff0c;因为标准的C库函数&#xff1b; 2、 等自己看完的这本书&#xff0c;有兴趣过来研究研究也是可以的。 8-11 vsprintf.c程序 8-11-1 功能描述 该程序主要包括vsprintf(),用于对参数产生格式化的输出。由于该函数是C函数…

SOME/IP 草稿

SOME/IP 名词解释 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩展性通信中间件协议。 面向服务 SOA基于 IP 协议之上的通信协议中间件 SOME/IP 功能 服务发现 (Service Discovery)远程服务调用 &#xff08;RPC,rem…

React面试题汇总 --2

1. 何为 redux &#xff0c;解决什么问题 操作流程 使用场景 优缺点 &#xff1f; Redux使用详解(一) Redux的核心思想与基本使用__聪明勇敢有力气的博客-CSDN博客Redux使用详解(一) Redux的核心思想与基本使用https://blog.csdn.net/weixin_65402230/article/details/128193…

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略 准备阶段部署网站腾讯云注册与解析添加API和密码更换域名的配置多密码管理密码更换密码批量生成 本教程收集于&#xff1a;AIGC从入门到精通教程汇总 全免费开源&#xff0c;仅需一个域名就可以部署国内的ChatGPT镜像版本。…

ConvTranspose2d 的简单例子理解

文章目录 参考基础概念简单例子&#xff1a; stride2step1step2step3 参考 逆卷积的详细解释ConvTranspose2d&#xff08;fractionally-strided convolutions)nn.ConvTranspose2d的参数output_padding的作用 基础概念 逆卷积&#xff0c;也叫反卷积或者转置卷积&#xff0c;…

故障分析 | OceanBase 频繁更新数据后读性能下降的排查

本文摘要 本文分析并复现了 OceanBase 频繁更新数据后读性能下降现象的原因&#xff0c;并给出了性能改善建议。 背景 测试在做 OceanBase 纯读性能压测的时候&#xff0c;发现对数据做过更新操作后&#xff0c;读性能会有较为明显的下降。具体复现步骤如下。 复现方式 环…

部门新来一00后,给我卷崩溃了...

2022年已经结束结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备今年的金三银四的面试计划。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的…

NFT数字藏品平台

在 NFT &#xff08;非同质化代币&#xff09;发行和交易中&#xff0c;数字藏品交易平台&#xff08;以下简称“交易平台”&#xff09;的运营模式和法律地位至关重要。本文对数字藏品交易平台的运营方式进行梳理&#xff0c;并对其中可能存在的法律风险进行分析。 2021年以来…

NFS服务器搭建(案例)

目录标题 第一个问题1.安装软件包2.进入配置文件进行定义&#xff0c;并创建对应的资源文件3.客户端进行挂载&#xff0c;并查看挂载信息&#xff0c;修改挂载权限4.客户端查看挂载的信息 第二个问题1.服务端配置文件进行定义&#xff0c;并创建对应资源文件2.客户端进行挂载3.…

电子邮件是最有效的营销方式吗?解析邮件营销的优势和劣势

互联网的快速发展&#xff0c;使得新媒体营销、短视频营销、微信营销等新型营销方式渗入到大家的生活中。很多人会认为邮件营销已经落后。但事实上&#xff0c;邮件营销仍然有着广泛的市场需求&#xff0c;特别是对于出海或者做跨境电商的企业来讲&#xff0c;邮件营销仍然发挥…

深度学习笔记(续)——数值稳定性、模型初始化与激活函数

深度学习笔记[续]——数值稳定性、模型初始化与激活函数 引言回顾&#xff1a;没有激活函数参与&#xff0c;输入输出分布的变化情况 Xavier \text{Xavier} Xavier方法 存在激活函数的情况假设激活函数是线性函数激活函数的底层逻辑 总结 引言 继续上一节介绍激活函数在神经网…

Google IO 2023推出Android Studio官方AI工具Studio Bot

Google推出Android Studio官方AI工具Studio Bot Studio Bot 简介 在2023 Google I/O大会上&#xff0c;Google 宣布在 Android Studio 中推出了一款名为 Studio Bot 的新 AI 功能&#xff0c;它将为开发者提供更高效、智能的开发体验。Studio Bot 是一个基于机器学习的助手&a…

想要快速进入车载测试?这份车载面试题集锦送给你,建议收藏!

1.道路测试流程 测试场地 1.测试场地有哪些&#xff1f; 对于一些要求不太高/简单的测试场景可以找一些封闭的场地&#xff0c;如断头路或者是城市所在地当地政府提供的诸如智能网联专用道路之类的测试道路&#xff0c;对于复杂或相对要求高一些的测试场景可以到专业的国家智…

【运维杂谈】如何将ios镜像挂载到Linux系统中?

本期我们实现将CentOS7.9系统镜像挂载到Linux系统当中&#xff0c;首先明确什么是挂载&#xff0c;我理解的挂载就是把系统镜像与Linux操作系统建立直接的联系&#xff0c;将镜像的顶级目录连接到Linux根目录下的某一目录中&#xff0c;就好比我们Windows系统插入一张光盘&…