在使用FLAG_ACTIVITY_NEW_TASK启动Android应用程序后关闭该应用程序

在使用FLAG_ACTIVITY_NEW_TASK启动Android应用程序后关闭该应用程序,android,android-service,Android,Android Service,我有两个Android应用程序A和B。应用程序A执行一些需要安全的任务,而应用程序B用于更典型的应用程序(UI等)。应用程序A在这里是相关的,主要是因为它有一个启动器活动,而应用程序B没有。对于用户来说,它应该看起来只有一个应用在运行 从应用程序a中的服务,我有时会向应用程序B中的服务发送请求以执行某些操作,如下所示: public class AppAService extends Service { //... more code ... public void makeRequ

我有两个Android应用程序A和B。应用程序A执行一些需要安全的任务,而应用程序B用于更典型的应用程序(UI等)。应用程序A在这里是相关的,主要是因为它有一个启动器活动,而应用程序B没有。对于用户来说,它应该看起来只有一个应用在运行

从应用程序a中的服务,我有时会向应用程序B中的服务发送请求以执行某些操作,如下所示:

public class AppAService extends Service {
   //... more code ...
   public void makeRequest(Intent request){
     request.setComponent(new ComponentName("com.mydomain.B", "com.mydomain.B.AppBService"));
     startService(request);

   }
}
public class AppBService extends Service {
    //... more code ...
    public void askUser(){
        Intent intent = new Intent(AppBService.this, UIActivity.class);
        //Need a new task since we are starting from a service
        intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
    }
}
当我在应用程序B的服务中收到这些请求时,有时我想从用户那里获得一些输入,或者显示进度(例如,如果我要下载一个文件,我可能想确保用户同意),因此我可能会启动如下UI活动:

public class AppAService extends Service {
   //... more code ...
   public void makeRequest(Intent request){
     request.setComponent(new ComponentName("com.mydomain.B", "com.mydomain.B.AppBService"));
     startService(request);

   }
}
public class AppBService extends Service {
    //... more code ...
    public void askUser(){
        Intent intent = new Intent(AppBService.this, UIActivity.class);
        //Need a new task since we are starting from a service
        intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
    }
}
我的问题是,我不希望用户能够通过打开最近的任务导航回UIActivity;实际上,这只是一件暂时的事情,让他们知道一些重要的事情正在发生。在UIActivity类完成获取输入后,我尝试在它中使用
System.exit(0)
,但这似乎不起作用(即使这样做了,我也会犹豫是否使用它)。以下是UIActivity中的相关函数,在用户提供相关输入后,我广播响应:

public void sendResponse(){
    Intent response = new Intent();
    response.setAction("com.mydomain.action.RESPONSE");
    sendBroadcast(response);
    finish();
    //System.exit(0); //using this breaks things AND the user can still open the activity from recent tasks
}  
我还在UIActivity的清单文件中将
noHistory
选项设置为true,但这也不起作用。我已经做了一件可以正常工作的事情,那就是在所有其他事情都完成后再次启动UIActivity,我检测并调用
System.exit(0)
。如果有必要,我可以求助于此,但似乎必须有更好的方法


基本上,我只想从我的服务中弹出一些简单的UI,然后阻止用户在提供必要的输入后导航回该活动。我考虑过从服务中的异步任务向窗口管理器添加UI元素,但这样做似乎太草率了。非常感谢您的建议。

您是否尝试过使用flag。flag\u ACTIVITY\u EXCLUDE\u FROM\u RECENTS

哇,现在我觉得自己很愚蠢。这很有效,非常感谢!