在 android 上必须多次按下后退按钮才能关闭 activity 是什么意思?

What does it mean when backbutton has to be pressed many times for an activity to close on android?

我有一个 activity 只有在我按下硬件的后退按钮多次(或多或少 2 次)后才会关闭。

我已经尝试检测这种情况何时发生,我认为这一定是由于我正在使用的 IntentService 使用 broadcastReceiver 接收一些信息,但我不太确定,因为没有错误消息或警告正在显示。

有经验的人知道我必须多次按下 activity 中的后退按钮才能关闭它通常意味着什么吗?

我什至尝试覆盖 onBackPressed() 但它不起作用:

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

更新

所以我插入了 activity 的一些控制台日志 onCreate() 和 onDestroy() 所以看起来一旦在 activity 当我按下后退按钮时 activity 似乎被创建再次(再次调用 activity 的 onCreate())然后调用 onDestroy。

更新 2

这是我认为可能触发问题的方法:

  private void startRestaurantsModelService(String url) {

        if(restaurantsBroadcastReceiver == null){
            //Intent to use RestaurantModel to getRestaurantsJsonArrays
            Intent getRestaurants = new Intent(HomeActivity.this, RestaurantModel.class);
            getRestaurants.putExtra("urlRestaurants", url);
            startService(getRestaurants);

            //The receiver that will receive restaurants list from RestaurantModel IntentService
            restaurantsBroadcastReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {

                    Bundle restaurantsBundle = intent.getExtras();
                    //Assign Restaurants received from service
                    restaurants = (List<Restaurant>) restaurantsBundle.getSerializable("restaurantsList");

                    //Now that we have restaurants list configure the RecyclerView
                    recyclerViewConfiguration();

                    //We need to know number of open restaurants so we can use different layout settings
                    //for closed restaurants in adapter using getItemViewType()
                    numberOfOpenRestaurants = restaurantsBundle.getInt("numberOfOpenRestaurants");
                    restaurantAdapter.setNumberOfOpenRestaurants(numberOfOpenRestaurants);
                    //Then update the RecyclerView
                    updateRecyclerView();

                    if (loadingDialog.isShowing()) {
                        loadingDialog.dismiss();

                    }

                }
            };

            registerReceiver(restaurantsBroadcastReceiver, new IntentFilter(RestaurantModel.BROADCAST_ACTION));
        }
    }

我正在取消注册 onPause 中的广播:

@Override
protected void onPause() {
    super.onPause();

    try {
        unregisterReceiver(restaurantsBroadcastReceiver);
        restaurantsBroadcastReceiver = null;


    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }
}

您可能希望确保 Activity 中的 onBackPressed() 未被覆盖。

谢谢大家指导!!!

解决了

在我的 startRestaurantsModelService() 中,我有一个调用 recyclerViewOnClickListener()

的方法 recyclerViewConfiguration()

看来是这个方法导致了错误,因为我设置了两次点击监听器:

 @Override
    public void recyclerViewOnClickListener() {
        recyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(this,
                        new RecyclerItemClickListener.OnItemClickListener() {
                            @Override
                            public void onItemClick(View view, int position) {

                                if (restaurants.get(position).isOpen()) {
                                    Intent i = new Intent(HomeActivity.this, MenuActivity.class);

                                    i.putExtra("restaurant", restaurants.get(position));
                                    i.putExtra("userAddress", address);

                                    startActivity(i);

                                }

                            }
                        })
        );
    }

所以我在同一个 recyclerview 上设置了 2 个点击监听器,所以现在我做了一个布尔值来检查 recyclerview 是否已经有一个点击监听器,如果没有我设置它,如果为真我就不再设置它。