android:launchMode与android:taskAffinity之间的相互影响

2023-05-16

最近有处理一个问题是:WPS office分屏状态下新建一个TXT时会在另一个窗口显示编辑界面。

分析流程:出现这种问题一般都是新建的界面设置了一些特别的属性导致。

通过命令dumpsys window |grep mFocusedWindow 查看新建一个TXT界面对应的Activity是:cn.wps.moffice_eng/cn.wps.moffice.writer.multiactivity.Writer1

通过反编译WPS office apk,查看AndroidManifest.xml文件,Writer1对应的声明为:

<activity
android:configChanges="fontScale|keyboard|keyboardHidden|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" 
    android:hardwareAccelerated="true" 
    android:icon="@drawable/public_icon_activity_writer" 
    android:label="@string/activity_label_writer"
    android:launchMode="singleTask" 
    android:name="cn.wps.moffice.writer.multiactivity.Writer1" 
    android:process=":writer1"
    android:taskAffinity="cn.wps.moffice_eng.writer1" 
    android:theme="@style/WriterTheme" 
    android:windowSoftInputMode="stateAlwaysHidden|adjustResize"/>

通过自己写简单app验证,是由于加了launchMode及taskAffinity属性导致两个Activity属于不同的Task导致。

正好借此机会梳理下android:launchMode与android:taskAffinity之间的关系。

1.android:launchMode

Activity的启动模式,属性值有4个,对应4种不同的启动模式。具体可以参考Activity的四种启动模式

standard:标准模式,默认模式。每次启动Activity时,总是创建一个新的Activity实例,并把这个Activity实例添加到当前的Task中(不会创建新的Task),不管这个Task中是否已经有了一个相同的Activity的实例。

singleTop:Task顶部单例模式,当将要启动的Activity已经位于Task顶部,则不创建新的Activity实例,而是直接使用已有的Activity实例,否则在当前Task中创建新的Activity实例。

singleTask:Task内单例模式,在同一个Task中已经存在了将要创建的Activity的实例,则直接复用,不再新创建Activity实例。即在同一个Task中,只存在同一个Activity的一个实例。分3种情况:

(1)在Task中将要创建的Activity不存在,则创建Activity的实例。

(2)在Task中将要创建的Activity存在,且位于栈顶,则不创建Activity的实例,直接复用。此时与singleTop模式一致

(3)在Task中将要创建的Activity存在,不位于栈顶,则系统把位于该Activity实例之上的所有Activity移出Task,使得目标Activity位于栈顶。

singleInstance:全局单实例模式,无论从哪个Task中启动目标Activity,只会创建一个Activity实例,并且会使用一个新的Task来存放该Activity。

2.android:taskAffinity

Activity的归属,也就是Activity应该在哪个Task中,Activity与Task的依附关系。默认情况下在同一个应用中,启动的Activity都在同一个Task中。

在standard模式下,设置两个Activity的android:taskAffinity不一致,打开这两个Activity,得到TaskId是一样的,即这两个Activity被放置在同一个task中。

在singleTop模式下,设置两个Activity的android:taskAffinity不一致,打开这两个Activity,得到TaskId是一样的,即这两个Activity被放置在同一个task中。

在singleTask模式下,设置两个Activity的android:taskAffinity不一致,打开这两个Activity,得到TaskId是不一样的,即这两个Activity被放置在两个task中。当两个Activity被放置在两个Task中的时候,点击recent键,可以看到此时recent应用中分别显示Activity1和Activity2。设置两个Activity的android:taskAffinity一致(非默认),打开这两个Activity,得到TaskId是不一样的,即这两个Activity被放置在两个task中。设置两个Activity的android:taskAffinity一致(默认的),打开这两个Activity,得到TaskId是一样的。

在singleInstance模式下,设置两个Activity的android:taskAffinity不一致,打开这两个Activity,得到TaskId是不一样的,即这两个Activity被放置在两个task中。当两个Activity被放置在两个Task中的时候,点击recent键,可以看到此时recent应用中分别显示Activity1和Activity2。设置两个Activity的android:taskAffinity一致(非默认),打开这两个Activity,得到TaskId是不一样的,即这两个Activity被放置在两个task中。设置两个Activity的android:taskAffinity一致(默认的),打开这两个Activity,得到TaskId是不一样的。

以上都有进行简单的代码验证,代码太简单,就不贴了~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android:launchMode与android:taskAffinity之间的相互影响 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • 使用 ADB 命令获取 IMEI 号码 Android 12

    对于 11 之前的 Android 版本 我使用以下命令从我的设备获取 IMEI 号码 adb shell service call iphonesubinfo 4 cut c 52 66 tr d space or adb shell s
  • 从 React Native Js 代码调用 Android Native UI 组件方法

    我创建了一个 CustomView SignatureView java 它扩展了 LinearLayout 以捕获 Android Native 中的签名 并创建了SignatureCapturePackage java和Signatur
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 调整浮动操作按钮的图标大小(fab)

    The new floating action button should be 56dp x 56dp and the icon inside it should be 24dp x 24dp So the space between i
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • 如何在 Viewpager 中禁用预加载下一页? [复制]

    这个问题在这里已经有答案了 如何在 Viewpager 中禁用页面预加载 I tried viewPager setOffscreenPageLimit 0 但它不起作用 用这个viewPager setOffscreenPageLimit
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Android应用程序可以像旧的普通java小程序一样嵌入到网页中吗?

    我对 android 平台一无所知 也无法在互联网上找到这个基本问题的答案 更新 好的 我本身无法嵌入 Android 应用程序 但是我可以在 Android Webbrowser 中嵌入 Java 的东西吗 不可以 您无法将 Androi

随机推荐

  • 关于SQL SERVER注释快捷键

    SQL Server Management Stuido提供了键盘和按钮快捷方式来注释掉突出显示的代码 只需突出显示要禁用或注释掉的代码部分 xff0c 再单击SQL Editor工具栏上的Comment Selection按钮即可 xff
  • Linux 网络编程—— libnet库详细使用指南

    概述 通过 原始套接字实例 xff1a 发送 UDP 数据包 的学习 xff0c 我们组 UDP 数据包时常考虑字节流顺序 校验和计算等问题 xff0c 有时候会比较繁琐 xff0c 那么 xff0c 有没有一种更简单的方法呢 xff1f
  • 论文一:基于实体多元编码的时序知识图谱推理_彭成

    xff08 本文很好的介绍了时序知识图谱的推理 xff0c 重要 xff01 xff01 xff01 xff09 时序知识图谱定义 xff1a 时序知识图谱是一种多关系有向图 xff0c 结点时时序知识图谱中的实体 xff0c 有向边是实体
  • SQLException: null, message from server: “Host ‘10.112.71.80‘ is blocked because of many connection

    启动项目后也看到报 SQLException null message from server 34 Host 39 10 112 71 80 39 is blocked because of many conne 这一类异常翻译来看是由于
  • Python案例003——句子生成器

    目标 xff1a 通过用户提供的内容 xff0c 随机生成唯一的句子 提示 xff1a 以用户输入的名词 代词 形容词等作为输入 xff0c 然后将所有数据添加到句子中 xff0c 并将其组合返回 输出固定的 内容 43 用户输入的内容 c
  • 通过Python复制远程服务器下的文件到本地

    使用Python拷贝windown共享目录下的文件 1 先通过net use命令获取共享目录访问权限 2 使用xcopy命令进行文件拷贝到本地目录 代码如下 import os share user 61 39 user 39 share
  • Centos6.5下进行PHP版本升级

    统计插件 WP Statistics 要求PHP5 4以上 xff0c 可本机PHP为5 3 3 xff0c 无奈只有对服务器PHP进行升级 xff0c 遂写下本文 Step1 xff1a 查看安装服务器当前安装版本 php V Step2
  • Ubuntu18.04 设置 sudo 不需要输入密码

    1 在系统启动后 xff0c 对于有些系统设备操作 xff0c 需要使用root权限执行 xff1b 这时候往往需要用到sudo命令 2 使用sudo命令 xff0c 必须输入用户密码 xff0c 但是在应用程序里面 xff0c 输入密码操
  • ipa文件的安装方法

    ipa文件无法像android的apk那样直接安装 xff0c 是因为需要能直接安装ipa xff0c 打包ipa的时候 xff0c 是需要创建不同的证书和证书profile文件的 下面我对三种情况进行概述 1 company类型 xff0
  • Windows7睡眠后自动唤醒

    笔者的电脑 xff08 Windows7 64 位旗舰版 xff09 睡眠后 xff0c 隔段时间后会自动唤醒 经两项配置后 xff0c 解决了该问题 1 禁用唤醒定时器 控制面板里进入 34 电源选项 34 34 更改计划设置 34 界面
  • 开机动画制作及多分辨率适配

    1 开机动画制作 开机动画资源文件 xff1a bootanimation zip 解压后的文件目录 xff1a desc txt文件内容 xff1a 512 416 60 代表的分别是宽 xff0c 高 xff0c 帧数 xff1b 具体
  • 查看Settings中的值

    1 列出所有的值 settings list secure global 如 xff1a settings list global 2 查看指定的值 settings get secure global xxx 如 xff1a settin
  • product 分区和权限

    在 Android 9 及更高版本中 xff0c 权限和列入白名单过程的更改会影响 product 分区上授予特权应用权限的方式 permissions xml 文件必须与特权应用位于同一个分区中 之前有遇到过 xff0c 应用在produ
  • 判断字符串中只包含字母和数字

    最近做一个小小的项目 xff0c 有输入用户名一项 xff0c 要求只能输入字母和数字 即在用户输入用户名后 xff0c 要做一个关于用户名的合法判断 xff1a 只包含字母和数字 一开始以为这个超级简单啊 xff0c 想都没想就直接使用了
  • Android中修改默认字体的大小----fontScale

    有客户需求要修改系统中默认字体的大小 一般的步骤是 xff0c 在frameworks base core java android content res Configuration java文件中 xff0c 修改函数setToDefa
  • Apk解压后查看AndroidManifest.xml文件内容

    一般对于我来说如果需要知道一个apk的包名的话 xff0c 有两种比较快速的方式 xff1a xff08 1 xff09 使用命令 xff1a aapt dump badging xxx apk xff0c 一般是apk就在电脑上 xff0
  • Failed to load WebView provider: No WebView installed

    系统中已经集成了Chrome及WebviewGoogle xff0c 但是在打开个别使用到WebView的应用的时候 xff0c 还是会出现应用FC xff0c 如 xff1a Setting gt System gt About phon
  • Apache中更改PHP版本型号

    如何对服务器PHP版本进行升级 xff0c 详看我另外一篇博文 xff0c 这篇文章我们将讲述如何在Apache中更改PHP版本型号 Step1 xff1a 查看Apache用的PHP什么版本 新建一个文档 xff0c 命名为info ph
  • 执行adb disable-verity提示:Device is locked. Please unlock the device first

    有时候需要push应用或是so文件到system目录下 xff0c 这时候就需要执行adb remount xff0c 但是有时候会提示 xff1a remount of the superblock failed Permission d
  • android:launchMode与android:taskAffinity之间的相互影响

    最近有处理一个问题是 xff1a WPS office分屏状态下新建一个TXT时会在另一个窗口显示编辑界面 分析流程 xff1a 出现这种问题一般都是新建的界面设置了一些特别的属性导致 通过命令dumpsys window grep mFo