- 当Activity处于运行状态时,Android会尽可能地保持这种状态,即使出现内存不足的情况,Android也会先销毁恚底的Activity,来确保当前Activity正常运行。
- 需要注意的是,Activity生命周期的启动状态和销毁状态是过渡状态,Activity不会在这两个状态停留。
方法 | 说明 |
---|---|
onCreate:创建活动 | 此时会把页面布局加载进内存,进入了初始状态。 |
onStart:开启活动 | 此时会把活动页面显示在屏幕上,进入了就绪状态。 |
onResume:恢复活动 | 此时活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作、允许用户输入文字等。 |
onPause:暂停活动 | 此时活动页面进入暂停状态(也就是退回就绪状态),无法与用户正常交互。 |
onStop:停止活动 | 此时活动页面将不在屏幕上显示。 |
onDestroy:销毁活动 | 此时回收活动占用的系统资源,把页面从内存中清除掉。 |
onRestart:重启活动 | 处于停止状态的活动,若想重新开启的话,无须经历onCreate的重复创建过程,而是走onRestart的重启过程。 |
onNewIntent:重用 | 已有的活动实例 |
- 如果一个Activity已经启动过,并且存在当前应用的Activity任务栈中,启动模式为singleTask,singleInstance或singleTop(此时已在任务栈顶端),那么在此启动或回到这个Activity的时候,不会创建新的实例,也就是不会执行onCreate方法,而是执行onNewIntent方法。
Activity
需要在Androidmanifest.xml
文件中配置组件<activity></activity>
Androidmanifest.xml
文件中<manifest></manifest>
标签中package属性指定的包名一致。android:name
的属性可以直接设置为.Activity组件名
<activity
android:name=".MainActivity2"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
startActivity()
。Intent
参数是Android应用中各个组件之间通信的桥梁。public void startActivity(Intent intent)
new Intent(this, ActFinishActivity.class)
finish()
public void finish()
public class MainActivity2 extends AppCompatActivity implements
View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
findViewById(R.id.button).setOnClickListener(this);
}
@Override
public void onClick(View view) {
finish();
}
}
Intent
来进行切换元素名称 | 设置方法 | 说明与用途 |
---|---|---|
Component | setComponent | 组件,它指定意图的来源与目标 |
Action | setAction | 动作,它指定意图的动作行为 |
Data | setData | 即Uri,它指定动作要操纵的数据路径 |
Category | addCategory | 类别,它指定意图的操作类别 |
Type | setType | 数据类型,它指定消息的数据类型 |
Extras | putExtras | 扩展信息,它指定装载的包裹信息 |
Flags | setFlags | 标志位,它指定活动的启动标志 |
来源Activity.this
;第二个参数表示待跳转的页面,即目标Activity.class
。Intent intent = new Intent(this, ActNextActivity.class); // 创建一个目标确定的意图
Intent intent = new Intent(); // 创建一个新意图
intent.setClass(this, ActNextActivity.class); // 设置意图要跳转的目标活动
Intent intent = new Intent(); // 创建一个新意图
// 创建包含目标活动在内的组件名称对象
ComponentName component = new ComponentName(this, ActNextActivity.class);
intent.setComponent(component); // 设置意图携带的组件信息
Android
系统会使用IntentFilter
匹配相应的组件,匹配的属性主要包括以下 3个:
AndroidManifest
中配置Action
<activity
android:name=".MainActivity2"
android:exported="true"
>
<intent-filter>
<action android:name="start_activity"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
MainActivity
中开启MainActivity2
Intent intent = new Intent();
intent.setAction("start_activity");
startActivity(intent);
AndroidManifest.xml
文件的Activity标签下的<intent-filter>
中,为被开启的Activity指定catrgory为"android.intent.category.DEFAULT"。必须在AndroidManifest.xml
文件的Activity标签下的<intent-filter>
中,为被开启的Activity指定catrgory为"android.intent.category.DEFAULT"。
Intent 类的系统动作常量名 | 系统动作的常量值 | 说明 |
---|---|---|
ACTION_MAIN | android.intent.action.MAIN | App启动时的入口 |
ACTION_VIEW | android.intent.action.VIEW | 向用户显示数据 |
ACTION_SEND | android.intent.action.SEND | 分享内容 |
ACTION_CALL | android.intent.action.CALL | 直接拨号 |
ACITON_DIAL | android.intent.action.DIAL | 准备拨号 |
ACTION_SENDTO | android.intent.action.SENDTO | 发送短信 |
ACTION_ANSWER | android.intent.action.ANSWER | 接听电话 |
AndroidManifest.xml
里的intent-filter
就是配置文件中的过滤器。像最常见的首页活动MainAcitivity
,它的activity
节点下面便设置了action
和category的过滤条件。其中android.intent.action.MAIN
表示App
的入口动作,而android.intent.category.LAUNCHER
表示在桌面<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
<action android:name="andrnid.intent.action. VIEW"/>
</intent-filter>
<intent-filter>
标答中间可以罗列多个action
属性,但是当使用隐式Intent
激活组件时,只要Intent
携带的action
与其中一个<intent-filter>
标签中action
的声明相同,action
属性就匹配成功。Activity
添加<intent-filter>
标签时,必须添加action
属性,否则隐式Intent
无法开启该Activity
.<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http..." />
<data android:mimeType="audio/mpeg" android:scheme="http..." />
</intent-filter>
<intent-filter>
标签中间可以罗列多个data属性,每个data属性可以指定数据的MIME类型和URI。其中,MIME类型可以表示image/ipeg
、video/*
等媒体类型。category
属性用于为action
添加额外信息,一个IntentFilter
可以不声明category
属性,也可以声明多个category
属性,在清单文件中设置category属性的示例代码如下:<intent-filter>
<category android:name="android.intent.category. DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Intent
中声明的category
必须全部能够与某一个IntentFilter
中的category
匹配才算匹配成功。需要注意的是,IntentFilter
中罗列的category
属性数量必须大于或者等于隐式Intent
携带的category
属性数量时,category
属性才能匹配成功。如果一个隐式Intent
没有设置category
属性,那么他可以通过任何一个IntentFilter(过滤器)
的category
匹配。AndroidManifest.xml
,在指定的activity节点添加属性android:launchMode
,表示本活动以哪个启动模式运行Intent
对象的setFlags
方法,表明后续打开的活动页面采用该启动标志<!--不添加属性的话默认就是标准模式-->
<activity android:name=".JumpFirstActivity" android:launchMode="standard" />
在该模式下,如果栈顶 Activity
为我们要新建的 Activity
(目标Activity),那么就不会重复创建新的Activity
。
应用场景:适合开启渠道多、多应用开启调用的 Activity,通过这种设置可以避免已经创建过的 Activity 被重复创建,多数通过动态设置使用。
singleTop
模式相似,只不过 singleTop
模式是只是针对栈顶的元素,而 singleTask
模式下,如果task
栈内存在目标 Activity
实例,则将 task 内的对应 Activity
实例之上的所有 Activity
弹出栈,并将对应 Activity
置于栈顶,获得焦点。Activity
,我们可以考虑将其设为 singleTask
模式,减少资源耗费singleInstance
,Activity1
和 Activity2
默认(standard
)。Background
的Task,蓝色的代表 Foreground
的Task。返回时会先把 Foreground
的Task 中的 Activity
弹出,直到 Task 销毁,然后才将 Background
的 Task
唤到前台,所以最后将Activity3
销毁之后,会直接退出应用Manifest
中通过launchMode
属性设置的,称为静态设置,动态设置是通过 Java 代码设置的。intent.setFlags();
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_SINGLE_TOP
Intent.FLAG_ACTIVITY_CLEAR_TOP
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf
文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转
文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。
文章浏览阅读1.3k次。最重要的一点,一定是degbug的方式启动,不然热部署不会生效,注意,注意!_tomcat热部署
文章浏览阅读10w+次,点赞56次,收藏482次。html5 ,用css去修饰自己的个人主页代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xh..._个人主页源码
文章浏览阅读201次。开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区来源:开源最前线链接:https://github.com/svenstaro/gen..._程序员怎么上班摸鱼
文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小
文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码
文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。 北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些
文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node
文章浏览阅读775次。当时老师一定会告诉你,这个一个"warning"的报警,可以不用管它,也确实如此。不过,这条报警信息我们至少可以知道一点,就是scanf函数调用完之后是有一个返回值的,下面我们就要对scanf返回值进行详细的讨论。并给出在编程时利用scanf的返回值可以实现的一些功能。_c语言ignoring return value
文章浏览阅读9.6k次。十四五规划下,数据安全成为国家、社会发展面临的重要议题,《数据安全法》《个人信息保护法》《关键信息基础设施安全保护条例》已陆续施行。如何做好“数据安全建设”是数字时代的必答题。_数字医疗服务保障方案