当我使用FLAG_ACTIVITY_SINGLE_TOP时 - onDestroy()让我的活动保持活跃

时间:2017-09-22 18:57:44

标签: android android-activity android-service

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

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我的活动仍然在bg ...
我添加了以下内容:

@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());
}

所以我可以看到Androids正在呼唤两者
但我的活动仍在那里......
任何的想法?
谢谢

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

1 个答案:

答案 0 :(得分:0)

您不能按照您的方式致电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)