2-AI--Activity启动方式

简介: 零、前言standard:默认的启动模式 |---启动一个Activity,该Activity就会在返回栈中入栈 |---该Activity处于栈顶的位置 |---每次启动都会创建该Activity的新实例 sing...

零、前言

standard:默认的启动模式
    |---启动一个Activity,该Activity就会在返回栈中入栈
    |---该Activity处于栈顶的位置
    |---每次启动都会创建该Activity的新实例
    
singleTop:
    |---在启动活动时若栈顶已经是该Activity,则认为可以直接使用它
    
singleTask:
    |---整个应用程序的上下文中只存在一个实例
    |---两次相同实例之间的Activity会被杀死

singleInstance:
    |---启用一个新的返回栈来管理这个活动

一、测试类

Activity1
public class Activity1 extends AppCompatActivity {

    @BindView(R.id.btn_start_self)
    Button mBtnStartSelf;
    @BindView(R.id.button_start_others)
    Button mButtonStartOthers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_task);
        ButterKnife.bind(this);
        Log.e("TASK_ID", "Activity1 Task id is " + getTaskId());
    }

    @OnClick({R.id.btn_start_self, R.id.button_start_others})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_start_self:
                startActivity(new Intent(Activity1.this, Activity1.class));
                break;
            case R.id.button_start_others:
                startActivity(new Intent(Activity1.this, Activity2.class));
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("TASK_ID", "Activity1 销毁");
    }
}
Activity2
public class Activity2 extends AppCompatActivity {

    @BindView(R.id.btn_start_self)
    Button mBtnStartSelf;
    @BindView(R.id.button_start_others)
    Button mButtonStartOthers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_task);
        ButterKnife.bind(this);

        Log.e("TASK_ID", "Activity2 Task id is " + getTaskId());
    }

    @OnClick({R.id.btn_start_self, R.id.button_start_others})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_start_self:
                startActivity(new Intent(Activity2.this, Activity2.class));
                break;
            case R.id.button_start_others:
                startActivity(new Intent(Activity2.this, Activity1.class));
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("TASK_ID", "Activity2 销毁");
    }
}
布局:ac_task.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_start_self"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="打开自己"
        android:textAllCaps="false"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="30dp"/>

    <Button
        android:id="@+id/button_start_others"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:text="打开别人"
        app:layout_constraintStart_toEndOf="@+id/btn_start_self"
        app:layout_constraintTop_toTopOf="parent"/>
    
</android.support.constraint.ConstraintLayout>

三、测试结果分析:

1:standard模式:Activity1、2皆为standard
standard.gif
依次打开Activity1、2、2、1、2
 E/TASK_ID: Activity1 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
 E/TASK_ID: Activity1 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
依次返回
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁

standard .png
:2:singleTop模式:Activity1为standard, Activity2 为singleTop
singleTop.gif
依次打开Activity1、2、2、1、2
E/TASK_ID: Activity1 Task id is 82
E/TASK_ID: Activity2 Task id is 82
E/TASK_ID: Activity1 Task id is 82
E/TASK_ID: Activity1 Task id is 82
依次返回
E/TASK_ID: Activity1 销毁
E/TASK_ID: Activity1 销毁
E/TASK_ID: Activity2 销毁
E/TASK_ID: Activity1 销毁

可见第二次打开Activity2时并无变化,因为singleTop模式,第二次的Activity2并没有创建

singleTop.png

:3:singleTask模式:Activity1为standard, Activity2 为singleTask
singleTask.gif
依次打开Activity1、2、2、1、2
E/TASK_ID: Activity1 Task id is 94
E/TASK_ID: Activity2 Task id is 94
E/TASK_ID: Activity1 Task id is 94
E/TASK_ID: Activity1 销毁
依次返回
E/TASK_ID: Activity2 销毁
E/TASK_ID: Activity1 销毁

可见第二次打开Activity2时并无变化,第三次打开Activity2,Activity1销毁

singleTask.png
:4:singleInstance模式:Activity1为standard, Activity2 singleInstance
singleInstance.gif
依次打开Activity1、2、2、1、2
 E/TASK_ID: Activity1 Task id is 115
 E/TASK_ID: Activity2 Task id is 116
 E/TASK_ID: Activity1 Task id is 115
依次返回
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁
 E/TASK_ID: Activity1 销毁

可见Activity2单独在一个栈中,多次开启Activity2不会新建实例

singleInstance.png

后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg
相关文章
|
17天前
|
人工智能 前端开发 JavaScript
【AI】命令行调用大模型
通过命令行调用AI大模型以提高效率,文章介绍了一个使用前端npm的方法。首先创建npm包项目,初始化配置,然后编写`constant.js`、`kiwi.js`和`main.js`三个文件,分别存放API密钥、调用接口和主逻辑。在`kiwi.js`中使用axios与大模型API交互,`main.js`接收命令行参数并输出结果。通过修改`package.json`设置入口文件,并使用`npm link`全局安装,实现命令行调用,如`moon 你好`。
31 0
|
3天前
|
人工智能 API
【AI Agent系列】【LangGraph】2. 再进阶:给你的LangGraph加入循环逻辑(Cycles)
【AI Agent系列】【LangGraph】2. 再进阶:给你的LangGraph加入循环逻辑(Cycles)
4 0
|
9天前
|
人工智能 IDE JavaScript
分享一个很好用的代码辅助AI工具CodeGeeX2
分享一个很好用的代码辅助AI工具CodeGeeX2
31 1
|
1月前
|
人工智能 文字识别 安全
谷歌推出通用AI代理:能自动执行600多种动作,游玩复杂3D游戏
谷歌DeepMind的SIMA项目旨在创建一个通用AI代理,该代理能在多种3D环境中执行复杂任务,通过语言指令与环境交互。目标是让AI理解并执行600多种动作,包括导航和建造等。使用多样化的3D环境训练,结合零基础训练和预训练模型,如SPARC和Phenaki,以增强语言理解和行动执行。评估方法多角度,包括人类评估,但也面临效率和成本挑战。项目注重伦理安全,但AI在复杂环境中的性能仍有提升空间。DeepMind将继续优化代理的鲁棒性,扩大研究范围,以推动通用人工智能的发展。
21 2
谷歌推出通用AI代理:能自动执行600多种动作,游玩复杂3D游戏
|
1月前
|
人工智能 异构计算 Python
字节跳动最新研究AI项目:一张图片组合一组动作就可以生成毫无违和感的视频!
字节跳动最新研究AI项目:一张图片组合一组动作就可以生成毫无违和感的视频!
|
1月前
|
存储 人工智能 数据库
生成式AI「人人可用」的时代,企业与开发者该怎么做?
有研究称:生成式AI正在从“第一幕”走向“第二幕”,“快速展示正被真正的价值和完整的产品体验所取代”,第二阶段中“生成式AI普惠”应该怎么做呢?
生成式AI「人人可用」的时代,企业与开发者该怎么做?
|
5月前
|
机器学习/深度学习 数据采集 人工智能
甭提ChatGPT了,这个新的AI助手将永远改变人们的工作方式
甭提ChatGPT了,这个新的AI助手将永远改变人们的工作方式
|
8月前
|
人工智能 程序员 Python
让AI给你工作:真正的帮你写代码
让AI给你工作:真正的帮你写代码
298 0
|
9月前
|
机器学习/深度学习 存储 人工智能
AI在数学界的作用和影响
众所周知,数学在科学中占据至关重要的地位。爱因斯坦曾说,“纯数学能使我们发现概念和联系这些概念的规律,给了我们理解自然现象的钥匙。数学之所以比一切其它科学受到尊重,一个理由是因为它的命题是绝对可靠的,无可争辩的,而其它的科学经常处于被新发现的事实推翻的危险。”那么,AI在数学界有哪些作用?AI未来对数学界会有哪些颠覆性影响?现在我们来进行论述和探讨。
116 0
|
10月前
|
人工智能 JSON 机器人
NDD(notepad--)的AI机器人插件制作过程
NDD(notepad--)的AI机器人插件制作过程