2017-09-22 107 views
2

当我的服务需要与用户交互启动的活动:当我使用FLAG_ACTIVITY_SINGLE_TOP - 的onDestroy()把我的活动活着

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。
这种方式它的工作W/O 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()); 
} 

所以我可以看到,机器人会被调用都
但我的活动仍然存在...
任何想法?
感谢

注:
席力图召从完成的onDestroy()() - 没有帮助

+0

你提的问题是非常困难的理解:-(请发表您的清单,并试图解释什么 –

+0

另外,你不能调用'Intent.setFlags()'当你调用'setFlags()'时,它会用参数覆盖标志你传给'setFlags()',这意味着在调用'setFlags()'3次之后,唯一将被设置的标志将是你在上一次调用'setFlags()'时指定的那个标志,你可以使用' addFlags()'而不是'setFlags()',或者你可以调用'setFlags()'一次并传递所有的标志作为参数,如下所示:'setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIV ITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_SINGLE_TOP)' –

+0

谢谢!这是什么错误:-)正如大卫解释说的 - 我最后一次调用Intent.setFlags()取消了FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,这就是为什么我的活动用户界面仍然可供用户在bg中使用。 FLAG_ACTIVITY_SINGLE_TOP没有任何待办事项:-)再次感谢。 – Ori

回答

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)

相关问题