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


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

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

    1. 2024-03-03 21:22:11.724 15131-15131 MultipleIcon pid-15131 D MainActivity.onCreate
    2. 2024-03-03 21:22:11.729 15131-15131 MultipleIcon pid-15131 D MainActivity.onStart
    3. 2024-03-03 21:22:11.730 15131-15131 MultipleIcon pid-15131 D MainActivity.onResume
    4. ---------------------------- PROCESS STARTED (15131) for package com.ifeng.multipleicon ----------------------------
    5. 2024-03-03 21:22:14.817 15131-15131 MultipleIcon com.ifeng.multipleicon D MainActivity.onStart
    6. 2024-03-03 21:22:14.817 15131-15131 MultipleIcon com.ifeng.multipleicon D MainActivity.onResume
    7. 2024-03-03 21:22:17.948 15131-15131 MultipleIcon com.ifeng.multipleicon D MainActivity.onStart
    8. 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

    1. 2024-03-03 21:26:49.050 15690-15690 MultipleIcon pid-15690 D MainActivity.onCreate
    2. 2024-03-03 21:26:49.057 15690-15690 MultipleIcon pid-15690 D MainActivity.onStart
    3. 2024-03-03 21:26:49.057 15690-15690 MultipleIcon pid-15690 D MainActivity.onResume
    4. ---------------------------- PROCESS STARTED (15690) for package com.ifeng.multipleicon ----------------------------
    5. 2024-03-03 21:26:52.114 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivityBt.onCreate
    6. 2024-03-03 21:26:52.117 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivity.onStart
    7. 2024-03-03 21:26:52.136 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivity.onNewIntent
    8. 2024-03-03 21:26:52.136 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivity.onResume
    9. 2024-03-03 21:26:56.130 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivityUsb.onCreate
    10. 2024-03-03 21:26:56.133 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivity.onStart
    11. 2024-03-03 21:26:56.143 15690-15690 MultipleIcon com.ifeng.multipleicon D MainActivity.onNewIntent
    12. 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配置文件

    1. <application
    2. android:allowBackup="true"
    3. android:dataExtractionRules="@xml/data_extraction_rules"
    4. android:fullBackupContent="@xml/backup_rules"
    5. android:icon="@mipmap/ic_launcher"
    6. android:label="@string/app_name"
    7. android:roundIcon="@mipmap/ic_launcher_round"
    8. android:supportsRtl="true"
    9. android:theme="@style/Theme.MultipleIconApplication"
    10. tools:targetApi="31">
    11. <activity
    12. android:name=".MainActivityBt"
    13. android:label="BT"
    14. android:exported="true"
    15. android:launchMode="singleTask"
    16. android:theme="@style/TranslucentTheme">
    17. <intent-filter>
    18. <action android:name="android.intent.action.MAIN" />
    19. <category android:name="android.intent.category.LAUNCHER" />
    20. intent-filter>
    21. activity>
    22. <activity
    23. android:name=".MainActivityUsb"
    24. android:label="USB"
    25. android:exported="true"
    26. android:launchMode="singleTask"
    27. android:theme="@style/TranslucentTheme">
    28. <intent-filter>
    29. <action android:name="android.intent.action.MAIN" />
    30. <category android:name="android.intent.category.LAUNCHER" />
    31. intent-filter>
    32. activity>
    33. <activity
    34. android:name=".MainActivity"
    35. android:exported="true"
    36. android:label="@string/app_name"
    37. android:launchMode="singleTask"
    38. android:theme="@style/Theme.MultipleIconApplication">
    39. <intent-filter>
    40. <action android:name="android.intent.action.MAIN" />
    41. <category android:name="android.intent.category.LAUNCHER" />
    42. intent-filter>
    43. activity>
    44. application>

    MainActivity相关刷新UI代码 :

    1. class MainActivity : AppCompatActivity() {
    2. private val type : String?
    3. get() = intent.getStringExtra("TYPE")
    4. // 第一次打开需要在这里刷新
    5. override fun onCreate(savedInstanceState: Bundle?) {
    6. super.onCreate(savedInstanceState)
    7. setContentView(R.layout.activity_main)
    8. Log.d("MultipleIcon", "MainActivity.onCreate")
    9. syncTypeDisplay()
    10. }
    11. override fun onStart() {
    12. super.onStart()
    13. Log.d("MultipleIcon", "MainActivity.onStart")
    14. }
    15. // 当非首次进入时,需要在这里刷新
    16. override fun onNewIntent(intent: Intent) {
    17. super.onNewIntent(intent)
    18. // 需要使用setIntent(intent)赋值给当前Activity的Intent.否则,后续的getIntent()都是得到老的Intent。
    19. setIntent(intent)
    20. syncTypeDisplay()
    21. Log.d("MultipleIcon", "MainActivity.onNewIntent")
    22. }
    23. private fun syncTypeDisplay() {
    24. findViewById(R.id.tv).text = when(type){
    25. "BT" -> {
    26. "蓝牙音乐"
    27. }
    28. "USB" ->{
    29. "USB音乐"
    30. }
    31. else -> {
    32. "收音机"
    33. }
    34. }
    35. }
    36. override fun onResume() {
    37. super.onResume()
    38. Log.d("MultipleIcon", "MainActivity.onResume")
    39. }
    40. }

  • 相关阅读:
    Rust for循环语法糖背后的API
    【毕业设计】基于SSM与vue的在线考试系统 -spring java web
    ICG-TCO,吲哚菁绿标记点击化学试剂,荧光标记反式环辛烯
    MySQL之查询性能优化(十三)
    网络安全(黑客)自学
    Oracle SQL优化(读懂执行计划 一)
    P1440 求m区间内的最小值
    【Java】已解决java.lang.ClassNotFoundException异常
    全网最简约的Vscode配置Anaconda环境(百分百成功)
    可解释人工智能(XAI)
  • 原文地址:https://blog.csdn.net/qq_20613731/article/details/136437471