我想Android不会让人们这样做,因为他们认为他们有完美的任务/应用程序处理。但是,我真的需要这样做。
我有一个活动A作为我的申请的入口点。在该活动中,它读取偏好并决定开始哪个活动,比如B或C.之后,它完成自己。因此,活动A永远不会出现在用户身上。
我的应用程序将内容存储在SD卡上,并不断读取它。因此,当卸载SD卡时,我需要向用户显示sdcard不可用的消息,而不是打开B或C.我在A中设置一个检查以在sdcard不可用时显示该消息。显示该消息时,A不会尝试启动B或C.
如果用户只从应用程序启动器输入我的应用程序,那么事情就完美无缺。但是,我发现用户也可以通过长按home进入我的应用程序并从最近的应用程序列表中选择它,如果他最近打开它。当用户这样做时,它跳过A并直接转到B或C.我没有检查它们,所以在我尝试访问sdcard时抛出异常,并弹出强制关闭对话框。
我可以简单地将支票移到B和C来解决这个问题。但是在未来,从A开始的活动数量将会增加。如果有6个,我需要将此支票复制到6个地方。毋庸置疑,这看起来非常难看,而且是维护的噩梦。
因此,最好的修复方法应该是在未安装SD卡时从最近的应用程序列表中删除我的应用程序。但是,我找不到如何做到这一点。即使终止进程或使用ActivityManager.restartPackage,它仍会出现在列表中。谁能告诉我如何从列表中删除它?
答案 0 :(得分:197)
试
<activity android:name=".MainActivity"
android:excludeFromRecents="true" ...
在AndroidManifest.xml
的活动声明中。
答案 1 :(得分:17)
其他属性可以帮助您的活动与同一个包中的其他活动隔离。
<activity
android:name=".aActivity"
android:excludeFromRecents="true"
android:taskAffinity=""
android:launchMode="singleInstance">
答案 2 :(得分:16)
只需在清单文件中的活动标签中添加android:excludeFromRecents="true"
即可。
答案 3 :(得分:11)
您需要设置AndroidManifest.xml:
<activity>
...
android:excludeFromRecents="true"
...
</activity>
或从
开始此活动intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
以及AndroidManifest.xml
<activity>
...
android:label=""
...
</activity>
将标签设置为空将使此活动不会显示在“最近的应用”列表中。
答案 4 :(得分:4)
我不建议这样做,但我会尝试以下选项:
选项1:
在B和C上添加:
protected void onPause() {
finish();
}
选项2:
在AndroidManifest
:
android:noHistory= "true"
答案 5 :(得分:4)
可能无法从最近的应用列表中删除您的应用,绝对不是最佳解决方案。这只会让期望所有应用程序行为相似的用户感到困惑。
无论如何,我认为它不会解决你的问题。如果用户在活动B上回家,然后从主页选择您的应用程序,它将再次启动Activiy B.
有很多方法可以解决实际问题。一个简单的方法可能是创建一个执行SD卡检查的基本活动,并让您的所有活动都从中扩展。这样检查只在一个地方。
答案 6 :(得分:2)
好的,我知道它可以在2.3.4中完成。打开应用程序Toddler Lock会清除最近的应用程序列表,这样当您长按主页键“锁定”手机时,列表为空白。不幸的是我还没有找到怎么做。所以对于任何正在寻找和阅读postf的人来说,说不可能不要放弃。我确定不是。
答案 7 :(得分:1)
尝试一下, 它将完成所有活动并从最近的用户中删除应用程序
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()
}
}
}
答案 8 :(得分:0)
如果您想退出按钮上的应用程序,请单击使用此代码:
Dim lastRow&
With Sheets("MoM")
lastRow = .Cells(.Rows.Count,8).End(xlUp).Row
.Range("H2:H" & lastRow).Value = .Range("H2:H" & lastRow).Value
End With
要杀死完整的应用程序并将其从Runningapp列表中删除,请通过其pid(令人讨厌的)杀死应用程序...在上面的代码之前使用这一行。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);