当我的服务需要与用户互动时,它会启动活动:

Intent i = new Intent(context, Ringer_intent.class);
i.putExtra("PHONE_NUMBER", phone_number);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
// TODO: This prevents onDestroy --> why???
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

context.startActivity(i);


为了确保Ringer_intent不会运行两次,我添加了

i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);


而且我还添加了我的活动

@Override
public void onNewIntent (Intent intent) {
}


我希望我的Ringer_intent活动结束后消失。我不希望用户能够将其带回fg。

没有FLAG_ACTIVITY_SINGLE_TOP的工作方式

但是使用FLAG_ACTIVITY_SINGLE_TOP,我的活动仍保留在背景中...

我添加了以下内容:

@Override
public void onStop() { Log.i(LOG_TAG, "Ringer_intent.onStop()"); // For Debugging
    super.onStop();
}

@Override
public void onDestroy() { Log.i(LOG_TAG, "Ringer_intent.onDestroy()"); // For Debugging
    super.onDestroy();
    Log.e(LOG_TAG, "Still not dead - kill it!");
    // Bad idea - it kills my service as well !!!
    // android.os.Process.killProcess(android.os.Process.myPid());
}


因此,我可以看到Android同时调用了

但是我的活动仍然在那里...

任何想法?

谢谢
注意:
我试图从onDestroy()调用finish()-没有帮助

最佳答案

您无法按照自己的方式调用Intent.setFlags()。调用setFlags()时,它将使用传递给setFlags()的参数覆盖标志。这意味着在调用setFlags()三次之后,唯一设置的标志将是您在上一次对setFlags()的调用中指定的标志。您可以使用addFlags()代替setFlags(),也可以调用一次setFlags()并将所有标志作为参数传递,如下所示:setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_SINGLE_TOP)

08-05 04:29