android-如何从最近的应用程序列表中删除应用程序?

我猜想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,它仍会出现在列表中。 谁能告诉我如何从列表中删除它?

user412759 asked 2019-11-18T08:51:39Z
9个解决方案
201 votes

尝试

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

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

whlk answered 2019-11-18T08:52:05Z
17 votes

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

<activity 
android:name=".aActivity"
android:excludeFromRecents="true"
android:taskAffinity=""
android:launchMode="singleInstance">
Kislingk answered 2019-11-18T08:52:29Z
16 votes

只需在清单文件中的活动标记中添加android:excludeFromRecents="true"

user632905 answered 2019-11-18T08:52:52Z
12 votes

您需要设置AndroidManifest.xml:

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

或从开始此活动

intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

以及在AndroidManifest.xml中

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

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

jackylalala answered 2019-11-18T08:53:35Z
4 votes

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

选项1:

在B和C上添加:

protected void onPause() {
  finish();
}

选项2:

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

android:noHistory= "true"
Macarse answered 2019-11-18T08:54:16Z
4 votes

从最新的应用程序列表中删除您的应用程序可能是不可能的,而且绝对不是最佳解决方案。 这只会使期望所有应用程序表现相似的用户感到困惑。

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

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

Cheryl Simon answered 2019-11-18T08:54:53Z
2 votes

好的,我知道可以在2.3.4中完成。 打开时,应用程序“幼儿锁”会清除最近的应用程序列表,因此,如果您长按主键,则“锁定”手机时,该列表为空白。 不幸的是我还没找到如何做。 因此,对于任何正在寻找并阅读postf并表示不可能的人,请不要放弃。 我肯定不是。

MastaCarlos answered 2019-11-18T08:55:18Z
0 votes

如果您想退出Button上的Application,请使用以下代码:

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);
Mahmouf Mrad answered 2019-11-18T08:55:49Z
0 votes

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

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()
        }
    }
}
Tushar Saha answered 2019-11-18T08:56:14Z
translate from https://stackoverflow.com:/questions/3762763/how-to-remove-application-from-recent-application-list