【问题标题】:How to remove application from recent application list?如何从最近的应用程序列表中删除应用程序?
【发布时间】:2010-09-21 17:21:15
【问题描述】:

我猜 Android 不会让人们这样做,因为他们认为他们可以完美地处理任务/应用程序。但是,我确实需要这样做。

我有一个活动 A 作为我的应用程序的入口点。在那个活动中,它读取偏好并决定开始哪个活动,比如 B 或 C。之后,它会自行完成。因此,活动 A 永远不会出现在用户面前。

我的应用程序将内容存储在 sdcard 上,并不断从中读取。因此,当卸载 sdcard 时,我需要向用户显示 sdcard 不可用的消息,而不是打开 B 或 C。我在 A 中设置了一个检查以在 sdcard 不可用时显示该消息。当显示该消息时,A 不会尝试启动 B 或 C。

如果用户只从应用程序启动器输入我的应用程序,一切都会完美运行。但是,我发现用户也可以通过长按主页进入我的应用程序,然后从最近的应用程序列表中选择它,如果他最近打开过它。当用户这样做时,它会跳过 A 并直接转到 B 或 C。我没有检查它们,所以当我尝试访问 sdcard 时抛出异常,并弹出强制关闭对话框。

我可以简单地将支票移至 B 和 C 来解决这个问题。但未来,从A开始的活动数量会增加。如果有 6 个,我需要把这张支票复制到 6 个地方。不用说,这看起来很丑,而且是维护的噩梦。

因此,最好的解决方法应该是在卸载 sdcard 时从最近的应用程序列表中删除我的应用程序。但是,我找不到如何做到这一点。即使杀死进程或使用 ActivityManager.restartPackage,它仍然出现在列表中。谁能告诉我如何从列表中删除它?

【问题讨论】:

  • I really need to do this in my case那你的设计错了
  • 这个答案stackoverflow.com/a/6468975/9909365 对我不起作用@user412759 你尝试过任何额外的解决方案吗

标签: android


【解决方案1】:

试试

<activity android:name=".MainActivity"
        android:excludeFromRecents="true" ...

在您的AndroidManifest.xml 的活动声明中。

【讨论】:

  • 如果我点击概览(最近的应用程序)按钮,活动会显示在最近的列表中
【解决方案2】:

其他属性可以帮助您的活动与同一包中的其他活动隔离。

<activity 
android:name=".aActivity"
android:excludeFromRecents="true"
android:taskAffinity=""
android:launchMode="singleInstance">

【讨论】:

    【解决方案3】:

    只需在清单文件中的活动标签中添加android:excludeFromRecents="true" 即可。很简单

    【讨论】:

      【解决方案4】:

      您需要在 AndroidManifest.xml 的 Launcher Activity 中设置以下代码:

      <activity>
        ...
        android:excludeFromRecents="true"
        ...
      </activity>
      

      或从以下位置开始此活动

      intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
      

      以及在 AndroidManifest.xml 中

      <activity>
        ...
        android:label=""
        ...
      </activity>
      

      将标签设置为空将使该活动不会显示在最近的应用列表中。

      【讨论】:

        【解决方案5】:

        我不建议这样做,但我会尝试以下选项:

        选项 1:

        在 B 和 C 上添加:

        protected void onPause() {
          finish();
        }
        

        选项 2:

        AndroidManifest中将以下内容添加到B和C:

        android:noHistory= "true"
        

        【讨论】:

          【解决方案6】:

          从最近的应用程序列表中删除您的应用程序可能是不可能的,而且绝对不是最好的解决方案。这只会让希望所有应用程序行为相似的用户感到困惑。

          无论如何,我认为它不会解决您的问题。如果用户在 Activity B 上点击主页,然后从主页选择您的应用,它将再次启动 Activiy B。

          有很多方法可以解决实际问题。一个简单的方法可能是创建一个执行 SD 卡检查的基本 Activity,并让您的所有 Activity 都从它扩展。这样一来,支票就只在一个地方。

          【讨论】:

            【解决方案7】:

            好的,我知道它可以在 2.3.4 中完成。 Toddler Lock 应用程序在打开时会清除最近的应用程序列表,因此当您“锁定”您的手机时,如果您长按 Home 键,则该列表是空白的。不幸的是,我还没有找到如何去做。因此,对于正在寻找和阅读 postf 并认为不可能的人来说,不要放弃。我确定不是。

            【讨论】:

              【解决方案8】:

              如果您想在按钮单击时退出应用程序,请使用此代码:

              Intent intent = new Intent(Intent.ACTION_MAIN);
              intent.addCategory(Intent.CATEGORY_HOME);
              startActivity(intent);
              

              要终止整个应用程序并将其从 Runningapp 列表中删除,请通过其 pid(其讨厌的)终止应用程序...在上述代码之前使用此行。

              int pid = android.os.Process.myPid();
              android.os.Process.killProcess(pid);
              

              【讨论】:

                【解决方案9】:

                试试这个, 它将完成所有活动并从最近删除应用程序

                private fun killCurrentApp() {
                    val am = this.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager?
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        val appTasks = am!!.getAppTasks()
                        if (appTasks.size > 0) {
                            val appTask = appTasks.get(0)
                            appTask.finishAndRemoveTask()
                        }
                    }
                }
                

                【讨论】:

                • 完美运行!而且它不需要最低版本的 API 21
                猜你喜欢
                • 2014-07-16
                • 1970-01-01
                • 1970-01-01
                • 2014-04-05
                • 1970-01-01
                • 2012-11-03
                • 1970-01-01
                • 2014-12-22
                • 1970-01-01
                相关资源
                最近更新 更多