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

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配置文件:

<applicationandroid: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"><activityandroid: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><activityandroid: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><activityandroid: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")}
}

相关文章:

  • C语言项目实战——贪吃蛇
  • Docker知识点总结二
  • Java agent技术的注入利用与避坑点
  • 主流开发语言和开发环境介绍
  • Docker Register 搭建私有镜像仓库
  • 如何通过隐藏服务器真实IP来防御DDOS攻击
  • 电脑蓝牙在哪里打开?不同系统详解
  • Linux中线程的实现,线程的接口相关函数pthread_create、pthread_join、pthread_exit
  • upload-Labs靶场“11-15”关通关教程
  • vue+uniapp实现图形验证码功能-插件(附源码)
  • SQL Server 安装部署
  • 【教程】uni-app iOS打包解决profile文件与私钥证书不匹配问题
  • leecode2917 | 找出数组中的k-or值
  • 企业跨境电商搭建电子商城需要用到的电商API接口
  • MySQL 8 创建一个新用户并赋予特定权限
  • [译] React v16.8: 含有Hooks的版本
  • Invalidate和postInvalidate的区别
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • python大佬养成计划----difflib模块
  • SQLServer之创建数据库快照
  • sublime配置文件
  • 工程优化暨babel升级小记
  • 计算机在识别图像时“看到”了什么?
  • 力扣(LeetCode)22
  • 前端存储 - localStorage
  • 如何合理的规划jvm性能调优
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 写代码的正确姿势
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 怎样选择前端框架
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​低代码平台的核心价值与优势
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #Linux(make工具和makefile文件以及makefile语法)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (规划)24届春招和25届暑假实习路线准备规划
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)VirtualBox安装增强功能
  • (一)基于IDEA的JAVA基础12
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .CSS-hover 的解释
  • .naturalWidth 和naturalHeight属性,
  • .NET BackgroundWorker
  • .net wcf memory gates checking failed
  • .net 验证控件和javaScript的冲突问题
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET6 命令行启动及发布单个Exe文件
  • .NET序列化 serializable,反序列化
  • .NET中 MVC 工厂模式浅析
  • /etc/motd and /etc/issue