0

У меня есть активность, которая закрывается только после многократного нажатия кнопки аппаратного обеспечения (более или менее 2 раз).Что это значит, что при нажатии на кнопку многократно запираться на андроид?

Я попытался обнаружить, когда это происходит, и я думаю, что это должно быть связано с IntentService, который я использую, который использует broadcastReceiver для получения какой-либо информации, но я не уверен, поскольку сообщение об ошибке или предупреждение отображается.

У кого-нибудь, у кого больше опыта, есть идея, что обычно означает, что я должен многократно нажимать на него, чтобы закрыть его?

Я даже пытался перекрывая onBackPressed(), но это не работает:

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

UPDATE

Так я вставил несколько журналов консоли OnCreate() и OnDestroy() деятельности, так что кажется, что когда-то на деятельность когда я нажимаю кнопку «назад», действие, похоже, снова создается (onCreate() активности вызывается снова), а затем вызывается onDestroy.

UPDATE 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(); 
    } 
} 
+0

Любые операции фрагментации в стеке? – laalto

+0

Обычно это означает, что у вас есть что-то на отрезке фрагмента или у вас есть несколько действий, возможно, одинаковых, уложенных друг на друга – njzk2

ответ

0

Спасибо всем за руководство !!!

решаемые это

Внутри моей startRestaurantsModelService() я havemethod recyclerViewConfiguration(), который вызывает recyclerViewOnClickListener()

Кажется, этот метод вызывает ошибку, потому что ставило два раза clicklistener:

@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); 

           } 

          } 
         }) 
     ); 
    } 

Я устанавливал 2 клика для прослушивания в том же recyclerview, так что теперь я сделал логическое значение, чтобы проверить, был ли recyclerview уже кликлайнер, если нет, я установил его, если true, тогда я не устанавливаю его снова.

0

Вы можете обеспечить что onBackPressed() не переоценивается в вашей деятельности.

+0

Да, я уже проверил и не переоценил – Jeka

+0

Ну, второе мое предположение, что у вас может быть больше чем один экземпляр Activity, уже запущенный к тому моменту, когда вы пытаетесь отступить. Вы думаете, это может быть так? –

+0

Можно ли проверить, существует ли более одного экземпляра действия? – Jeka

Смежные вопросы