2016-12-20 6 views
0

Почему onDestroy() называется, когда я нажимаю на уведомление и перехожу к своей деятельности? Управляющий поток выглядит следующим образом:> onCreate -> onStart -> onResume -> onDestroy. Ниже приведен код для добавления уведомления: -Почему onDestroy() называется, когда я нажимаю на уведомление и перехожу к своей деятельности?

private void addNotification(String message, User user, String roomId) { 
    System.out.println("Inside addNotif service"); 
    if (message.length()==0) { 
     return; 
    } 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
    builder.setSmallIcon(R.drawable.notification_icon); 
    builder.setContentTitle("2222----You have new message(s)"); 
    builder.setContentText(message); 
    builder.setAutoCancel(true); 

    Intent notificationIntent; 

    if (roomId.contains("admin1")) { 
     notificationIntent = new Intent(this, DemoChatActivity.class); 
    } else { 
     notificationIntent = new Intent(this, copyDemoChatActivity.class); 
    } 
    //notificationIntent.putExtra(com.clover_studio.spikachatmodule.utils.Const.Extras.USER, user); 
    Config config = new Config(com.clover_studio.spikachatmodule.utils.Const.Api.BASE_URL, com.clover_studio.spikachatmodule.utils.Const.Socket.SOCKET_URL); 
    notificationIntent.putExtra(com.clover_studio.spikachatmodule.utils.Const.Extras.CONFIG, config); 
    notificationIntent.putExtra(com.clover_studio.spikachatmodule.utils.Const.Extras.ROOM_ID, roomId); 


    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(contentIntent); 

    // Add as notification 
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(0, builder.build()); 
} 

Мой OnDestroy() метод:

@Override 
protected void onDestroy() { 
    System.out.println("copyDemoChat - onDestroy()"); 
    super.onDestroy(); 
    Log.d(TAG, "unregistering reciever"); 
    // Unregister since the activity is about to be closed. 
    Intent intentN = new Intent(copyDemoChatActivity.this, com.clover_studio.democloverapp.Utils.SSNotificationService.class); 
    copyDemoChatActivity.this.startService(intentN); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    isRunningCDCA = false; 
} 
+0

Возможно, этот код создаст новую активность. Итак, предыдущий будет Destroy .. Вы можете получить новое намерение в 'onNewIntent()' в существующей Activity. –

+0

На вашем направлении я немного искал onNewIntent() и нашел [this] (http://stackoverflow.com/questions/8357200/how-we-can-use-onnewintent-in-any-activity). Это привело меня к [этой ссылке] (http://www.helloandroid.com/tutorials/communicating-between-running-activities). Но, к сожалению, даже после реализации метода onNewIntent() была вызвана функция onDestroy(). –

+0

ОК, поэтому мой метод onNewIntent() не называется вызываемым! Как обеспечить, чтобы он был вызван, если активность, которую я собираюсь, уже присутствует в фоновом режиме? –

ответ

1

Просто Проходят некоторые putExtra строки в Notiification как

if (roomId.contains("admin1")) { 
     notificationIntent = new Intent(this, DemoChatActivity.class); 
    } else { 
     notificationIntent = new Intent(this, copyDemoChatActivity.class); 
    } 
notificationIntent.putExtra("From","Notification"); 

В вашей деятельности, где применяемый метод onDestory(), поддерживать один флаг

 boolean isFromNotification = false; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      onNewIntent(getIntent()); 
     } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     String tmString = intent.getExtra().getString("From"); 
     isFromNotification = tmString.equalsIgnoreCase("Notification"); 
     } 

И onDestroy Метод

@Override 
    protected void onDestroy() { 
     if(!isFromNotification){ 
     System.out.println("copyDemoChat - onDestroy()"); 
     super.onDestroy(); 
     Log.d(TAG, "unregistering reciever"); 
     // Unregister since the activity is about to be closed. 
     Intent intentN = new Intent(copyDemoChatActivity.this, com.clover_studio.democloverapp.Utils.SSNotificationService.class); 
     copyDemoChatActivity.this.startService(intentN); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
     isRunningCDCA = false; 

     } 
     isFromNotification =false; 
    } 

Если любой вопрос, дайте мне знать.

+0

Где заканчивается "if"? –

+0

@ShraddheyaShendre, Извините, для кода ошибки, Просто отредактирован –

+0

Это сработало! Чтобы сделать некоторые изменения, например до «equalsIgnoreCase», пришлось добавить проверку, является ли строка нулевой или нет, и ей пришлось вынуть super.onDestroy() из «if», иначе было выбрано исключение. –

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

  • Нет связанных вопросов^_^