如何从我的应用程序中以编程方式退出应用程序?我有一个退出按钮,会弹出一个对话框,提示用户确认退出。后退按钮做同样的事情。这通常有效。但是,当我收到某些事件并且用户点击通知时,我也会将意图发送回我的MainActivity。我注意到,在这种情况下启动intent,然后用户尝试退出时,应用程序不会退出,而是似乎返回到上一个实例。如果我点击3个通知,将3个意图发送回MainActivity,我意识到我需要在返回主屏幕之前退出应用程序3次。
以下是我的退出代码:
private AlertDialog alert;
if (alert != null) {
if (alert.isShowing()) {
alert.dismiss();
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Exit");
builder.setMessage("Are you sure you want to exit?").setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
getActivity().finish();
System.exit(0);
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
alert = builder.create();
alert.show();
这是我的通知/意图代码
Intent launchIntent;
launchIntent = new Intent(context, MainActivity.class);
launchIntent.putExtra("myType", type);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, launchIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder noti = new NotificationCompat.Builder(
context).setContentTitle(context.getResources().getString(R.string.app_name))
.setContentText(notificationMessage)
.setSmallIcon(R.drawable.ic_stat_notify)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_ALL);
notificationManager.notify(notifyId, noti.build());
答案 0 :(得分:0)
您正在使用FLAG_ACTIVITY_NEW_TASK启动活动的新实例。你不应该这样做。您应该使用旧的活动,否则您将继续创建新实例。什么是hapepning,你正在创建的每个任务都被添加到ActivityStack中,当你回击它时会遍历这个列表。如果您创建了三个实例,那么每次回击时它都会显示您的活动3次。
答案 1 :(得分:0)
您可以将活动设置为单个实例,以便从您调用设备的任何位置返回堆栈中的相同活动。
在Manifest.xml中
“... android:launchMode =”singleInstance“>
答案 2 :(得分:0)
前两个考虑因素:
System.exit(0)
来终止Activity
,只需Activity.finish()
要避免Intent
调用相同Activity
的多个实例,请从FLAG_ACTIVITY_NEW_TASK
删除Intent
标记并添加FLAG_ACTIVITY_CLEAR_TOP
一个。
来自Doc:
FLAG_ACTIVITY_CLEAR_TOP
如果设置,则启动的活动是 已经在当前任务中运行,而不是启动新任务 该活动的实例,其上的所有其他活动 将被关闭,这个意图将被传递到(现在在顶部) 旧活动作为新的意图。FLAG_ACTIVITY_NEW_TASK
如果设置,此活动将成为此历史堆栈上新任务的开始。