以编程方式退出我的应用

时间:2014-05-14 03:23:17

标签: android android-intent exit android-notifications

如何从我的应用程序中以编程方式退出应用程序?我有一个退出按钮,会弹出一个对话框,提示用户确认退出。后退按钮做同样的事情。这通常有效。但是,当我收到某些事件并且用户点击通知时,我也会将意图发送回我的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());

3 个答案:

答案 0 :(得分:0)

您正在使用FLAG_ACTIVITY_NEW_TASK启动活动的新实例。你不应该这样做。您应该使用旧的活动,否则您将继续创建新实例。什么是hapepning,你正在创建的每个任务都被添加到ActivityStack中,当你回击它时会遍历这个列表。如果您创建了三个实例,那么每次回击时它都会显示您的活动3次。

答案 1 :(得分:0)

您可以将活动设置为单个实例,以便从您调用设备的任何位置返回堆栈中的相同活动。

在Manifest.xml中

“... android:launchMode =”singleInstance“>

答案 2 :(得分:0)

前两个考虑因素:

  • 不要在您的应用程序中使用退出按钮,更重要的是,当用户按下时询问用户是否要退出,不要打扰用户。当用户使用后退键退出时,Android系统将关注您的应用程序。
  • 您不需要致电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
  如果设置,此活动将成为此历史堆栈上新任务的开始。