Android - 活动完成()结果黑屏

时间:2015-04-23 04:14:26

标签: java android performance

我有AlertActivityActivity。收到广播时,两个活动都需要完成。但如果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}}。

请帮助我。

5 个答案:

答案 0 :(得分:4)

最后,我找到了解决方案:

完成Activity延迟1秒,这确实有效。到那时,AlertActivity完成并且无法显示黑屏。

new Handler().postDelayed(new Runnable() {
      @Override
          public void run() {
              finish();
          }
}, 1000);

答案 1 :(得分:0)

AlertActivityActivity一样,您正在检查相同的操作“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();
    }
}