[Android Training视频系列]2.1 Starting an Activity

STM32F407嵌入式WebServer登录注册实现指南 嵌入式WebServer不仅是HTTP协议栈的移植,更是面向产线安全与可用性的工程实践。其核心在于在资源受限设备上构建身份认证能力——通过LwIP精简裁剪、裸机SHA-256密码哈希、SRAM模拟用户存储等关键技术,实现内存可控(RAM<8KB)、无文件系统依赖、明文零落地的安全登录注册闭环。该方案直面STM32F407+LAN8720A组合的PHY初始化、TCP缓冲区管理、URL解码、会话Token轻量设计等真实瓶颈,适用于工业HMI、传感器配置界面等需‘敢用’而非仅‘能跑’的嵌入式网络场景。 阅读详情
1.主要内容
 本小节首先对Activity的各个生命周期作简单介绍,然后介绍如何设置Main Activity,最后讲解创建和销毁Activity。

2.视频讲解

http://www.eyeandroid.com/thread-11253-1-1.html


3.翻译参考

启动Activity

与其他在应用程序中由main()函数作为开端不同,Android系统的启动代码是在一个Activity的实例通过调用对应其生命周期的特定阶段的特定回调方法中进行。
其中有一系列的方法来启动Activity,也有一系列的方法来注销一个Activity。这次的教学内容,将会描述生命周期中最重要的函数方法,并向你展示如何在创建你的Activity实例时处理首要生命周期回调函数。


了解生命周期回调函数

在Activity的整个生命中,系统按顺序地调用一系列的像金字塔般的生命周期函数。也就是说,每个阶段的活动是金字塔中单独的一个步骤。当系统创建了一个新的Activity实例,每调用一个函数,就会往金字塔顶端走一步。而金字塔最顶端的状态(Resumed状态)就是Activity正在前台运行而且用户正与其交互的状态。当用户开始离开Activity,系统就会调用其他的方法,使Activity的状态往金字塔的低端走,并逐步去除Activity。
在某些条件下,Activity只会往低端走一小步并在该处等待(例如用户转去了其他应用程序),而在该处Activity也可以重新回到顶端(当用户返回到原Activity)并恢复到原来的状态。

basic-lifecycle.png

图1。Activity生命周期的简化图,就像一个阶梯金字塔。这图像表明每个状态中是怎么样使用回调函数使得恢复状态回到顶端,或者降低状态到达底部。Activity可以从Paused状态和stopped状态恢复到Resumed状态。根据你的Activity的复杂程度,你可能不需要使用全部的生命周期函数。然而,去认识每一个周期函数并使用它们去保证满足用户的期望是非常重要的。

正确使用你的Activity生命周期函数去保障应用程序的良好表现,必须注意很多方面,包括下面的内容:
   当用户接听电话或者转去另外一个应用程序时,不要让程序崩溃。
   当用户没有激活使用它时,不消耗宝贵的系统资源。
   当用户离开你的应用程序并在稍后的时间返回,不会丢失用户的进度。
   当用户屏幕在横向与纵向旋转切换时,不会崩溃或者丢失用户进度。

Resumed状态


   在这种状态下,该Activity在前台运行,用户可以与它进行交互。(有时也简称为“running”状态。)

 Paused状态


   在这种状态下,该Activity被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码。

Stopped状态


   在这种状态下,该活动是完全隐藏,不可见的,它被认为是在后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码。
其他的状态(created状态和started状态)都是非常短暂而且系统通过调用函数使得非常快地转到下一状态。
因此,当系统调用了onCreated()之后,非常快地就调用了onStart()方法使得进入下一状态,而又马上调用了onResumed又进入了下一状态。


上面是基本生命周期知识。下面,您开始学习一些具体的生命周期行为。

指定你的程序首次启动的Activity


当用户从主屏幕点击应用程序图标,系统会调用你声明的launcher或者main Activity 的onCreate()函数,这是Activity作为您的应用程序界面为主要切入点。你可以在Androidmanifest.xml文件中定义程序的主Activity,该文件在您的项目的根 目录下。

主Activity必须在manifest文件中使用<intent-filter>标签,并包含Main action和LAUNCHER 内容。 例如:

<activity android:name=".MainActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity> 

注:当你创建一个新的Android项目,默认的项目会包含一个Activity类,并且此类会有如上的声明。如果mainAction内容或者launcher内容都没有在您的其中任何一个activity生命中,那么您的应用程序的图标就不会出现在android的主屏菜单列表上了。


创建一个新的实例

大多数的应用程序都会有若干个不同的Activity去让用户实现不同的操作。主Activity在当用户点击你的应用程序图标并对用户的操作作出反应,调用onCreate()方法创建一个Activity的实例。

你必须在onCreate()方法中操作一些在整个生命周期内只会调用一次的程序启动逻辑内容。例如,可以在onCreate()方法中定义用户界面的或者初始化一些类变量的内容。


例如,以下的代码向你展示在onCreate()方法中执行活动的一些基本设置,如声明用户界面(在XML布局文件中定义),定义成员变量,并配置UI。

TextView mTextView; // Member variable for text view in the layout
 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    // Set the user interface layout for this Activity
    // The layout file is defined in the project res/layout/main_activity.xml file
    setContentView(R.layout.main_activity);
 
    // Initialize member TextView so we can manipulate it later
    mTextView = (TextView) findViewById(R.id.text_message);
 
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        // For the main activity, make sure the app icon in the action bar
        // does not behave as a button
        ActionBar actionBar = getActionBar();
        actionBar.setHomeButtonEnabled(false);
    }
}

注意:在Android2.0(API 5 Level)或者更高版本中,使用SDK_INT阻止旧的操作系统执行新的API函数,老版本的版本将会遇到“运行时异常”的错误。一旦onCreate()方法执行完毕,系统会迅速地执行onStart()方法和onResume()方法。您的Activity永远不会停留在Created或者Started状态中。当onStart()方法被调用之后,Activity将会变成可见,但是onResume()方法会迅速被调用,并且Activity会维持在Resumed状态直到一些事情发生,例如接到电话,或者用户导航到另一个Activity中,或者屏幕被关闭了。

在后续的其他内容中,你会学习到其他的启动函数在从Paused或者Stoped状态中恢复您的Activity的妙用之处。 注:onCreate()方法包含一个参数:savedInstanceState,这将会在后面重建Activity的内容中讲到。

basic-lifecycle-create.png

图2:这是描述Activity生命周期结构的另外一个例子,着重强调三个主要的回调函数在创建一个实例中的调用顺序:onCreate(),onStart(),onResume()。一旦这个调用顺序完成了,Activity将会到达用户可以交互的Resumed状态直到用户选择去了其他Activity。


销毁Activity

Activity的第一个生命周期函数是onCreated,最后一个生命周期函数是onDestroy()。系统将调用onDestroy()函数作为Activity从内存中完全销毁去除的最后一个信号。大多数的应用程序并不需要使用到这个函数,因为局部类的引用将会和Activity一起销毁,而一些清理工作,主要也是在onPaused()和onStop()中。然而,如果你的Activity包含了有在onCreated()或者其他持续性运行的资源在后台线程行运行,您就应该在onDestroy()方法中清除掉它们,而避免内存泄露。

@Override
public void onDestroy() {
    super.onDestroy();  // Always call the superclass
 
    // Stop method tracing that the activity started during onCreate()
    android.os.Debug.stopMethodTracing();
} 

一般来说,系统会在调用onPause()方法和onStop()之后才调用onDestory()方法,但是,有一种情况是例外的,那就是在你在onCreate()方法中调用finish()方法。在一些情况下,你的Activity作为一个临时决定的操作对象而去启动另外一个Activity时,你可能需要在onCreate()方法中调用finish()方法去销毁Activity,在这种情况中,系统会直接调用onDestroy()方法而不用再去调用其他的生命周期函数。



GBase8a-GDCA认证考试-复习参考题 为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。 阅读详情

相关推荐

SQL注入绕过information_schema:实战技法与替代路径详解

SQL注入是Web安全领域的核心漏洞类型,其原理是通过构造恶意SQL语句,干扰应用程序与数据库的正常交互逻辑,从而窃取或篡改数据。在渗透测试与CTF竞赛中,绕过常见防护措施是提升技术能力的关键。当标准的信息收集方式受阻时,例如无法访问information_schema数据库,攻击者需要掌握替代的元数据获取方法。这些技术价值在于模拟真实环境中日益严密的防御体系,锻炼在受限条件下的系统性信息收集思维。典型的应用场景包括存在WAF过滤、权限限制或编码干扰的实战环境。本文将围绕SQL注入这一核心,深入探讨如何利用

weixin_33980459的博客 430

Android官方开发文档Training系列课程中文版:添加ActionBar之自定义ActionBar样式

原文地址 : http://android.xsoftlab.net/training/basics/actionbar/styling.html ActionBar的样式 ActionBar提供了为用户提供了常见的习惯性的用户界面以及按钮功能。但是这并不意味着必须要和其它APP看起来一模一样。如果需要设计更符合产品品牌样式风格...

weixin_34418883的博客 152

从零抓包分析AVDTP:用Wireshark解密蓝牙音频传输全流程

本文详细介绍了如何使用Wireshark抓包工具分析AVDTP协议,解密蓝牙音频传输的全流程。从实验环境搭建到信令交互解析,再到媒体流传输深度分析,逐步揭示蓝牙音频传输的技术本质,帮助开发者深入理解AVDTP协议的工作机制。

sun99的博客 204

android 2.1 SDK源码

andriod SDK2.1的java源代码,分两个压缩包,解压后存入一个文件夹即可 如下图: 图一: [img]http://dl.iteye.com/upload/attachment/361906/a24e4ae3-d900-3bda-9a09-ac80ea525ed8.png[/img] 图二: [img]http://dl.iteye.com/upload/attachment...

如果爱,请深爱! 132

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 560

C#串口通信从入门到精通(1)——硬件接线

RS-232接口一般都是9针的,有公母头(针头和孔头),为了便有理解以下都称为针头和孔头,针头就是露出来的针,孔头就是9个孔,总共使用3条线进行通信,一条用于发送,一条用于接收,另外一根是GND地线,由于线路的功能是永久性的,设置连接时,必须确保一个节点的发送线与另一个节点的接收线相连,反之亦然,RxD(PC的接收线)连接到TxD(传感器电子设备的发送线),TxD(PC的发送线)连接到RxD(传感器电子设备的发送线)。两条线路的电平都是相对于GND的。因此,GND也必须连接,但不能将GND与屏蔽连接。

qq_34059233的博客 1万+

Android SDK 2.1 下载与安装教程

一、Google已经发布了Android SDK 2.1版本.下面给朋友们介绍一下安装2.1的 Android 模拟器 Emulator模拟器的方法: 1、首先下载最新的SDK 2.1文件,直接贴出文件地址,大家可以用迅雷下载: Windows版 http://dl.google.com/android/android-sdk_r04-windows.zip Linux版 ...

不夜的星辰 339

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1545

[Android Training视频系列]2.3 Stopping and Restarting an Activity

1.主要内容 本小节介绍onStop与onRestart以及onStart的使用,通过本讲我们能学会应该在onStop与onStart里面执行什么样的操作。 2.观看视频讲解 http://www.eyeandroid.com/thread-11346-1-1.html 3.翻译参考 停止与重启Activity 在activity生命周期中,恰当的停止与重启ac

703

【Claude】Auto Mode 触发安全分类器拦截的三种错误变体及对应处理 bug报错已解决

深度解析Claude Auto Mode安全分类器拦截的三种变体:内容拒绝、操作中断、累积触发,含完整排查流程与绕过策略。

博客 7598

RH850系列芯片深度剖析 1.5-链接(ld)文件解析

基础编译过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。CONSTANTS接下来的内存空间定义部分会使用这些常量来定义内存空间的范围,理论上来说不定义常量也没有影响,直接用魔鬼数字代替,定义常量的主要目的就是方便理解以及方便修改;从示例中可以看出,常量的值可以为16进制或者10十进制,而且10进制支持数量级单位(k级,M级);

本博客专注于嵌入式软件领域技术分享。 1430

[Android Training视频系列]1.4 Starting Another Activity

1.主要内容 本小结在1.3节的基础上,继续完善代码,会书写Button响应事件,在响应事件中新建一个Intent去启动另外一个Activity。 2.视频讲解 http://www.eyeandroid.com/thread-11210-1-1.html 3.翻译参考 Respond to the Send Button-响应Send(发送)按钮 响应按钮

807

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2202

[Android Training视频系列]2.4 Recreating an Activity

1.主要内容 本讲讲解onSaveInstanceState与onRestoreInstanceState的使用。 2.视频讲解 http://www.eyeandroid.com/thread-11391-1-1.html 3.翻译参考 存在一些情况,由于普通的程序行为,你的activity会被销毁,比如,当用户点击Back按钮,或者自己调用finish()方法。另外,如果

700

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[Android Training视频系列]2.2 Pausing and Resuming an Activity

1.主要内容本讲介绍onPause和onResume,主要分析了在onPause函数中应该执行哪些操作。2.视频讲解 http://www.eyeandroid.com/thread-11291-1-1.html3.翻译参考 在正常的程序使用中,处于前台运行的activity有时会被另外一些可见的组件遮挡,从而造成activity被暂停。比如,一个半透明的activity(类似一个对话框)被打

萌萌的It人 www.itmmd.com 845

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Android Training - 01】详解Activity生命周期 [ Lesson 2 - 暂停与恢复Activity ]

Pausing and Resuming an Activity [暂停与恢复activity] 在使用通常的app时,前端的activity有时候会被其他可见的组件而阻塞(obstructed),这样会导致当前的activity进入Pause状态。例如,当打开一个半透明的activity时 (such as one in the style of a dialog) ,之前的act

迁移到http://hukai.me 2543

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: [Android Training视频系列]1.4 Starting Another Activity
下一篇: [Android Training视频系列]2.2 Pausing and Resuming an Activity
cofftech
博客等级 码龄16年 46粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值