Ham*_*mad 53 android systemexit activity-finish
我知道这个问题很常见,并且在Stack Overflow上多次询问,但在访问了近四页的搜索引擎结果和几乎关于这个问题的Stack Overflow的20个问题后,我发现它们都没有得到正确的解决或回答.
我想要的是:
我想在最近的应用程序列表中显示我的应用程序,但是当我关闭应用程序时,我的进程应该被终止,应用程序应该从最近的应用程序列表中删除.
我找到了一些答案:
use System.exit(0); //doesn't clear app from recents
OR
use android.os.Process.killProcess(android.os.Process.myPid()); //doesn't clear app from recents
OR
use finish() or this.finish() or Activity.finish();// doesn't clear app from recents
Run Code Online (Sandbox Code Playgroud)
我在每个答案中看到的一个常见建议是在清单中添加以下代码:
android:excludeFromRecents //I think this is wrong approach.
Run Code Online (Sandbox Code Playgroud)
因为当用户在我的应用程序运行时按下主页按钮添加此项后,用户无法在最近的应用程序列表中看到我的应用程序.
关于此的许多其他建议,但他们都没有做任何关闭应用程序和从最近的应用程序列表中清除应用程序.此外,如果你进去Settings>Apps>yourApp>your Application
看到仍然它要求"强制停止"意味着应用程序正在运行!
Luk*_*uke 79
我的解决方案基于上面的客户,以及下面的gilsaints88评论(对于Android L兼容性):
将此活动添加到AndroidManifest.xml文件中:
<activity
android:name="com.example.ExitActivity"
android:theme="@android:style/Theme.NoDisplay"
android:autoRemoveFromRecents="true"/>
Run Code Online (Sandbox Code Playgroud)
然后创建一个ExitActivity.java类:
public class ExitActivity extends Activity
{
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(android.os.Build.VERSION.SDK_INT >= 21)
{
finishAndRemoveTask();
}
else
{
finish();
}
}
public static void exitApplication(Context context)
{
Intent intent = new Intent(context, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,只要您想强制关闭应用程序并将其从最近的列表中删除,请致电:
ExitActivity.exitApplication(context);
Run Code Online (Sandbox Code Playgroud)
这个解决方案适用于我,而不是声明android:excludeFromRecents ="true",因为我希望用户能够在最近的列表中看到应用程序,直到我的应用程序触发以编程方式关闭应用程序.
gue*_*est 19
在我展示我的尝试之前,我想说清楚以下内容不会解决应用程序信息中"强制停止"的可用性.Android允许您强制停止应用程序,即使它没有运行任何进程.强制停止将程序包置于特定的已停止状态,无法接收广播事件.
现在,这就是我的干净利落的想法.它的要点是用一个系统将从最近的应用列表中排除的任务替换您要退出的任务.
Exiter
刚刚完成的活动(我称之为).
finish()
在onCreate(Bundle)
.System.exit(int)
.但是对于阅读这个答案的其他人来说,你通常不必杀死这个过程.android:theme="@android:style/Theme.NoDisplay"
以避免因此导致了一堆多余的转换.android:taskAffinity
为Exiter
将在要退出的任务中运行.或者不:默认情况下,未指定taskAffinity
使得所有活动共享一个共同的匿名taskAffinity
.startActivity(Intent)
开头Exiter
:
Intent.FLAG_ACTIVITY_NEW_TASK
- 即使我们想在同一个任务中启动活动,其他标志也需要这个标志.幸运的是,这taskAffinity
将阻止系统实际启动新任务.Intent.FLAG_ACTIVITY_CLEAR_TASK
- 这完成了任务的所有活动.你不必在finish()
任何地方打电话,只是在Exiter
.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- 该任务不会出现在最近的应用列表中.由于它与正在退出的任务相同,因此该标志从列表中删除任务.https://gist.github.com/anonymous/9884978
将此添加到您的活动中:
@Override
public void finish() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
super.finishAndRemoveTask();
}
else {
super.finish();
}
}
Run Code Online (Sandbox Code Playgroud)
在您的活动完成后调用此应该关闭,并且应该完成任务作为完成任务的根活动的一部分.
归档时间: |
|
查看次数: |
47300 次 |
最近记录: |