当前位置: 首页 > news >正文

[Android 四大组件] --- Activity

1 Activity是什么

​​Activity​​是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。

一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。将Activity设为主活动的方法,如下面代码所示需要在AndroidManifest文件中添加以下内容:

<application>....<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>....
</application>

Activity 必须在 AndroidManifest.xml 注册,如果没有注册这 Activity 就不能正常运行,其实在正常情况下在使用Android 中的四大组件(Activity,Service,BrocastReceiver,ContentProvider)时都需要再 AndroidManifest.xml 中注册

2 Activity创建流程

先给出一个简单的示例,然后在分步骤讲解

// MainActivity.javapublic class MainActivity extends AppCompatActivity
{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
// AndroidManifest.xml<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

1> 自定义Activity类名 ,继承Activity类或者他的子类

class MainActivity extends AppCompatActivity

继承Activity和AppCompatActivity的区别:
AppCompatActivity兼容了很多低版本的一些东西
AppCompatActivity相对于Activity的变化:主界面带有toolbar的标题栏

2> 重写onCreate()方法,在该方法中调用setContentView()设置要显示的视图

    protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}

3> 在AndroidManifest.xml中对Activity进行配置

// AndroidManifest.xml<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

4> 启动Activity: 调用startActivity(Intent)

Intent it = new Intent(MainActivity.this, MyActivity.class);
startActivity(it);

5> 关闭Activity: 调用finish,直接关闭当前Activity
我们可以把它写到启动第二个Activity的方法中,当启动第二个Activity时,第一个Activity就会被关闭

3 启动一个Activity的几种方式

Activity是通过Intent用来在应用程序的Activity间启动、停止和传输。

启动Activity有三种方法:

1 显示启动

显式启动比较简单,首先创建一个Intent,指定应用程序上下文和需要启动的Activity,然后调用startActivity来启动新的Activity。

<!--AndroidManifest.xml-->
<activity android:name=".SecondActivity"></activity>
//启动Activity
Intent it = new Intent(this, SecondActivity.class);
startActivity(it);

2 隐式启动

若 SecondActivity 在AndroidManifest.xml文件中配置 intent-filter 的 action 和 category、data,如下:

<intent-filter>    <action android:name="myaction2"/>    <category android:name="android.intent.category.DEFAULT"/>    <category android:name="mycategory" />
</intent-filter>

那么可以通过如下方式启动 SecondActivity :

Intent intent = new Intent("myaction2");
startActivity(intent);

3 默认启动

通过桌面图标点击应用图标进入程序的第一个Activity,因其启动方式有别上述两个方式,将其划分为第三类的启动方式。 若Activity在AndroidManifest.xml文件的intent-filter的action和category,如下:

<intent-filter>    <action android:name="android.intent.action.MAIN" />    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

那么,点击桌面的应用图标即可启动Activity。

注:如果在N个Activity中都配置上述的action和category,那么桌面会有N个应用的图标,点击不同的图标会进入对应的Activity。

4 Activity的生命周期

在这里插入图片描述

Note: onCreate, onStart, onResume(), onPause(), onStop(), onRestart(), onDestroy()这些都是回调函数,我们不能够去调用,我们能做的知识重写这些回调函数里的内容,什么时候调用由Activity决定。
我们能够手动调用的只有finish()方法,该方法用于关闭某个Activity。

onCreate():你必须实现此回调,它会在系统创建你的 Activity 时触发。你的实现应该初始化Activity的基本组件。

onStart():此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。到了这一步用户可见不可交互。

onResume():此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在onResume()方法中实现的。到了这一步用户可见可交互。

onPause():当用户点按"返回"或"最近使用的应用"按钮时,Activity失去焦点并进入"已暂停"状态时,系统就会调用onPause()。到这一步用户可见不可交互。系统会停止动画等消耗CPU的操作。

onStop():到了这一步用户不可见。停止动画和刷新UI等。

onRestart():当处于"onStop()"状态的Activity即将重启时,系统就会调用此回调。

onRestart()会从Activity停止时的状态恢复Activity至运行状态。

onDestroy():这是Activity最后一个方法。可以用isFinishing()来判断它,如果有dialog在运转,要在这个界面将dialog给cancel掉,不然抛异常。

5 Activity的四种状态

在这里插入图片描述
Running(运行):在屏幕前台(位于当前任务堆栈的顶部)

Paused(暂停):失去焦点但仍然对用户可见(覆盖Activity可能是透明或未完全遮挡)

Stopped(停止):完全被另一个Activity覆盖

Destroyed(销毁):退出,完全销毁

http://www.lryc.cn/news/152742.html

相关文章:

  • shell中for循环输出1-6
  • docker 04.更加重要的命令
  • 【理解线性代数】(二)线性运算和线性空间
  • 专业的视觉特效处理包,FxFactory 8 Pro for Mac助您打造精彩视频
  • Darshan日志分析
  • python中如何不修改字符串的前提,使其对大小写字母不敏感
  • 聊聊Http服务化改造实践
  • docker打包部署
  • 解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤
  • Three.js添加阴影和简单后期处理
  • git submodule 子模块的基本使用
  • 四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队
  • 【vue】vue前端实现随机验证码(数字、字母混合)功能
  • 使用Visual Studio 2022实现透明按钮和标签、POPUP样式窗体的一种工业系统的UI例程
  • 【爬虫】7.1. JavaScript动态渲染界面爬取-Selenium
  • 菜鸟教程《Python 3 教程》笔记(12):推导式
  • MAC修改python3命令为py
  • Windows下Git Bash调用rsync
  • springboot自定义事件发布及监听
  • 手写RPC框架--2.介绍Zookeeper
  • Docker harbor 私有仓库的部署和管理
  • 从零开始搭建AI网站(6):如何使用响应式编程
  • MPI之虚拟进程拓扑
  • Three.js相机参数及Z-Fighting问题的解决方案
  • 微信小程序食疗微信小程序的设计与实现
  • mac环境使用pkgbuild命令打pkg包的几个小细节
  • 在 Spring Boot 中集成 MinIO 对象存储
  • seq2seq与引入注意力机制的seq2seq
  • 【zookeeper】zookeeper介绍
  • 2023高教社杯数学建模思路 - 案例:ID3-决策树分类算法