我有AlertActivity
和Activity
。收到广播时,两个活动都需要完成。但如果AlertActivity
位于Activity
之上,则以下代码会显示黑屏。
以下是Activity
中的代码:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT")){
if(alertActvity != null)
alertActivity.finish();
finish();
}
}
AlertActivity
中的代码:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT"))
finish();
}
}
首先,在调用onStop()
的{{1}}之前调用活动AlertActivity
会导致黑屏,甚至onStop()
之前调用的AlertActivity
finish()
Activity
的{{1}}。
请帮助我。
答案 0 :(得分:4)
最后,我找到了解决方案:
完成Activity
延迟1秒,这确实有效。到那时,AlertActivity
完成并且无法显示黑屏。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 1000);
答案 1 :(得分:0)
与AlertActivity
和Activity
一样,您正在检查相同的操作“BROADCAST_INTENT”,我假设您已在自己的班级中注册了两个接收器。
如果您这样做,那么实际上您有两个广播接收器等待同一事件。当这个事件发生时,你的两个接收器都会得到它。
所以在你的AlertActivity
中已经完成了两次。
答案 2 :(得分:0)
我认为@Amit K. Saha,是的,你的AlertActivity
可能会两次完成
解决方案:
如果您的应用程序正在运行> = API 16,那么您可以使用finishAffinity()
方法:
在当前任务中完成此活动及其下方的所有活动 具有相同的亲和力。这通常在应用程序可以启动到另一个任务时使用(例如从它理解的内容类型的ACTION_VIEW),并且用户已经使用向上导航切换出当前任务并进入其自己的任务。在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动作为任务切换的一部分从原始任务中删除。
请注意,此完成功能不允许您将结果传递给 以前的活动,如果你正在尝试,将抛出异常 这样做。
您可以从finishAffinity()
致电AlertActivity
,因为它位于Activity
之上。这将完成AlertActivity
以及Activity
答案 3 :(得分:0)
我透明的活动完成结果黑屏,搜索后,我发现它是由Android 4.4中的活动切换动画引起的。但是在android 5.1之上没有出现这种现象。 因此,我添加了以下代码:
@Override
public void finish() {
super.finish();
overridePendingTransition(0, 0);
}
完成后的黑屏消失了。 我认为这可能会有所帮助。
答案 4 :(得分:-1)
试试这个
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("BROADCAST_INTENT"))
context.finish();
}
}