Android 多桌面图标启动, 爬坑点击打开不同页面

备注 :
MainActivity 正常带界面的UI
MainActivityBt 和 MainActivityUsb  是透明的,即 android:theme="@style/TranslucentTheme"

###场景1:只有MainActivity 设置成:android:launchMode="singleTask"
点击顺序:MainActivity > home键 > MainActivityBt > home键 > MainActivityUsb
日志如下:

2024-03-03 21:22:11.724 15131-15131 MultipleIcon            pid-15131                            D  MainActivity.onCreate
2024-03-03 21:22:11.729 15131-15131 MultipleIcon            pid-15131                            D  MainActivity.onStart
2024-03-03 21:22:11.730 15131-15131 MultipleIcon            pid-15131                            D  MainActivity.onResume
---------------------------- PROCESS STARTED (15131) for package com.ifeng.multipleicon ----------------------------
2024-03-03 21:22:14.817 15131-15131 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onStart
2024-03-03 21:22:14.817 15131-15131 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onResume
2024-03-03 21:22:17.948 15131-15131 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onStart
2024-03-03 21:22:17.949 15131-15131 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onResume

日志简化图: 并没有执行MainActivityBt.onCreate 和 MainActivityUsb.onCreate;而且MainActivity只会执行一次。


###场景2:三个都设置成:android:launchMode="singleTask"

点击顺序:MainActivity > home键 > MainActivityBt > home键 > MainActivityUsb

2024-03-03 21:26:49.050 15690-15690 MultipleIcon            pid-15690                            D  MainActivity.onCreate
2024-03-03 21:26:49.057 15690-15690 MultipleIcon            pid-15690                            D  MainActivity.onStart
2024-03-03 21:26:49.057 15690-15690 MultipleIcon            pid-15690                            D  MainActivity.onResume
---------------------------- PROCESS STARTED (15690) for package com.ifeng.multipleicon ----------------------------
2024-03-03 21:26:52.114 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivityBt.onCreate
2024-03-03 21:26:52.117 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onStart
2024-03-03 21:26:52.136 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onNewIntent
2024-03-03 21:26:52.136 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onResume
2024-03-03 21:26:56.130 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivityUsb.onCreate
2024-03-03 21:26:56.133 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onStart
2024-03-03 21:26:56.143 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onNewIntent
2024-03-03 21:26:56.144 15690-15690 MultipleIcon            com.ifeng.multipleicon               D  MainActivity.onResume

 

日志简化图: 都有执行MainActivityBt.onCreate 和 MainActivityUsb.onCreate;而且MainActivity也成功跳转了!

!!!注意点:
#1. 多图标入口,需要跳转对应页面,入口Activity需要设置成singleTask, 否则只会唤起现有后台的页面。

#2. 多图标入口,如果是公用一个页面,刷新数据需要在onCreate 和 onNewIntent 中刷新UI。

详细代码:
Manifest配置文件:

<application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MultipleIconApplication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivityBt"
            android:label="BT"
            android:exported="true"
            android:launchMode="singleTask"
            android:theme="@style/TranslucentTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".MainActivityUsb"
            android:label="USB"
            android:exported="true"
            android:launchMode="singleTask"
            android:theme="@style/TranslucentTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:theme="@style/Theme.MultipleIconApplication">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

MainActivity相关刷新UI代码 :

class MainActivity : AppCompatActivity() {

    private val type : String?
        get() = intent.getStringExtra("TYPE")

    // 第一次打开需要在这里刷新
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("MultipleIcon", "MainActivity.onCreate")
        syncTypeDisplay()
    }

    override fun onStart() {
        super.onStart()
        Log.d("MultipleIcon", "MainActivity.onStart")
    }

    // 当非首次进入时,需要在这里刷新
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        // 需要使用setIntent(intent)赋值给当前Activity的Intent.否则,后续的getIntent()都是得到老的Intent。
        setIntent(intent)  
        syncTypeDisplay()
        Log.d("MultipleIcon", "MainActivity.onNewIntent")
    }

    private fun syncTypeDisplay() {
        findViewById<TextView>(R.id.tv).text =  when(type){
            "BT" -> {
                "蓝牙音乐"
            }
            "USB" ->{
                "USB音乐"
            }
            else -> {
                "收音机"
            }
        }
    }

    override fun onResume() {
        super.onResume()
        Log.d("MultipleIcon", "MainActivity.onResume")
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02-pycharm详细安装教程(大妈看了都会)

目录 1.官方下载pycharm 2.开始安装pycharm 3.开始运行pycharm 1.官方下载pycharm 官方&#xff1a;https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 提示&#xff1a;安装pycharm之前建议先安装python&#xff0c;因为pycharm要基于python环境才能运…

azure devops工具实践分析

对azure devops此工具的功能深挖&#xff0c;结合jira的使用经验的分析 1、在backlog的功能描述&#xff0c;可理解为需求项&#xff0c;这里包括了bug&#xff0c;从开发的角度修复bug也是个工作项&#xff0c;所以需求的范围是真正的需求&#xff08;开发接收到的已经确认的…

二叉树的前序后序中序层序

文章目录 一、二叉树的前序遍历二、二叉树的中序三、后序四、层序 引言&#xff1a;首先我们讲一下什么是二叉树的前序中序后序层序 前序&#xff1a;从 根 左子树 右子树访问 中序&#xff1a;从 左子树 根 右子树访问 后序&#xff1a;从 左子树 右子树 根访问 等到根为空的…

java面试题(spring框架篇)(黑马 )

树形图&#xff1a; 一、Spring框架种的单例bean是线程安全吗&#xff1f; Service Scope("singleton") public class UserServiceImpl implements UserService{ } singleton:bean在每个Spring IOC容器中只有一个实例 protype&#xff1a;一个bean的定义可以有多个…

使用 Grafana 使用JSON API 请求本地接口 报错 bad gateway(502)解决

一 . 问题&#xff1a; 在用docker部署Grafana 来实现仪表盘的展示&#xff0c;使用到比较多的就是使用JAON API插件调用本地部署的API&#xff0c;比如访问localhost下的 /test_data 接口&#xff0c;一般我们使用的是http://localhost:8080/test_data&#xff0c; 但是在访…

Python测试框架pytest介绍用法

1、介绍 pytest是python的一种单元测试框架&#xff0c;同自带的unittest测试框架类似&#xff0c;相比于unittest框架使用起来更简洁、效率更高 pip install -U pytest 特点&#xff1a; 1.非常容易上手,入门简单,文档丰富&#xff0c;文档中有很多实例可以参考 2.支持简单的单…

计算机网络-第2章 物理层

本章内容&#xff1a;物理层和数据通信的概念、传输媒体特点&#xff08;不属于物理层&#xff09;、信道复用、数字传输系统、宽带接入 2.1-2.2 物理层和数据通信的概念 物理层解决的问题&#xff1a;如何在传输媒体上传输数据比特流&#xff0c;屏蔽掉传输媒体和通信手段的差…

Java学习27--IDEA常用快捷键

智能显示相关提示&#xff1a;altenter,用来快速生成Scanner&#xff0c;或者new object等等&#xff0c;也可以爆红线求提示 代码模板大全ctrlj 可以快速生成try catch finally模块的surround with&#xff1a;ctrlaltt(我换成了altc) 生成getter/setter/构造器等结构-genera…

武器大师——操作符详解(下)

目录 六、单目操作符 七、逗号表达式 八、下标引用以及函数调用 8.1.下标引用 8.2.函数调用 九、结构体 9.1.结构体 9.1.1结构的声明 9.1.2结构体的定义和初始化 9.2.结构成员访问操作符 9.2.1直接访问 9.2.2间接访问 十、操作符的属性 10.1.优先性 10.2.结合性 …

【MySQL】SQL 优化

MySQL - SQL 优化 1. 在 MySQL 中&#xff0c;如何定位慢查询&#xff1f; 1.1 发现慢查询 现象&#xff1a;页面加载过慢、接口压力测试响应时间过长&#xff08;超过 1s&#xff09; 可能出现慢查询的场景&#xff1a; 聚合查询多表查询表数据过大查询深度分页查询 1.2 通…

2023 版王道单科书勘误汇总(3.30)

注:因2023版对题目编号做了优化“历年真题全部放最后、且按年份排序”&#xff0c;以方便大家根据需要保留某些年份的真题作为最后的模拟。所以造成了一些题目和解析的编号错误。 数据结构: P11 P20 P56 P278 P326 “2.”中第 3 行”题 5改成”9”&#xff0c;第6行”题 8”改成…

线性表——单链表的增删查改

本节复习链表的增删查改 首先&#xff0c; 链表不是连续的&#xff0c; 而是通过指针联系起来的。 如图&#xff1a; 这四个节点不是连续的内存空间&#xff0c; 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 单链表的全部接口…

【EAI 027】Learning Interactive Real-World Simulators

Paper Card 论文标题&#xff1a;Learning Interactive Real-World Simulators 论文作者&#xff1a;Mengjiao Yang, Yilun Du, Kamyar Ghasemipour, Jonathan Tompson, Leslie Kaelbling, Dale Schuurmans, Pieter Abbeel 作者单位&#xff1a;UC Berkeley, Google DeepMind, …

探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 备忘录模式揭秘-实现时光回溯、一键还原、后悔药和穿越时空隧道 文章目录 一、案例场景&…

19.1 SpringBoot入门

19.1 SpringBoot入门 1. SpringBoot1.1 简介1.2 核心特点1.3 SpringBoot演变1.4 SpringBoot版本1. SpringBoot 1.1 简介 1.2 核心特点

【系统分析师】-计算机组成结构

1、计算机结构 2、存储系统 Cache是访问最快 DRAM是存取最快 先来先服务 FCFS&#xff1a;按照磁道号访问顺序 最短寻道时间优先SSTF&#xff1a;查找下一个最少的磁道数。柱面相同找磁头、磁头相同找扇区 3、数据传输控制方式 4、总线 总线&#xff1a; 分 时 传 输 &#…

十四、计算机视觉-形态学梯度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、梯度的概念二、梯度的应用三、梯度如何实现 一、梯度的概念 形态学梯度&#xff08;Morphological Gradient&#xff09;是数字图像处理中的一种基本操作&…

C++学习笔记:二叉搜索树

二叉搜索树 什么是二叉搜索树?搜索二叉树的操作查找插入删除 二叉搜索树的应用二叉搜索树的代码实现K模型:KV模型 二叉搜索树的性能怎么样? 什么是二叉搜索树? 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树…

数据处理——一维数组转列向量(分割时间序列为数据块时的问题)

记录在处理数据时被磕绊了一下的一个处理细节。 1.想要达到的要求 在某次滑动窗口取样时间序列数据时&#xff0c;我得到如下一个以一维数组为元素的列表&#xff1a; 对于如上输出列表中的每个一维数组&#xff0c;我希望将其转换为下图中的形式&#xff0c;简单说就是希望他…

3. springboot中集成部署vue3

1. vue3构建 构建命令 npm run build&#xff0c; 构建的结果在disc目录&#xff1a; 2. springboot集成 2.1 拷贝vue3构建结果到springboot resources/static目录 2.2 springboot pom依赖 添加thymeleaf依赖 <dependency><groupId>org.springframework.boot</…