2016-08-30 2 views
5

Ich habe zwei Aktivitäten, ChatActivity und ChatOneActivityWarum wird onDestroy() aufgerufen, wenn ich eine Benachrichtigung starte? Wie man es verhindert?

Ich möchte eine Benachrichtigung in der ChatActivity bauen, und wenn ich die Meldung drücken, fand ich die onDestroy() Methode aufgerufen wird. Warum? Ich kann verstehen, warum die onStop Methode aufgerufen wird, weil die Ansicht nicht mehr sichtbar ist. Aber onDestroy()? Warum? Ich habe die ChatActivity nicht beendet!

Wie verhindere ich das? Ich möchte nur die onStop Methode aufgerufen werden, will ich nicht die Aktivität getötet werden.

Hier ist, wie ich die Benachrichtigung

private void showNotification(String id, String message) { 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
      getApplicationContext()) 
      .setSmallIcon(android.R.drawable.sym_action_email) 
      .setContentTitle("You have a new message") 
      .setContentText(message); 
    Intent intent = new Intent(ChatActivity.this, ChatOneActivity.class); 
    intent.putExtra("toId", id); 
    TaskStackBuilder stackBuilder = TaskStackBuilder 
      .create(ChatActivity.this); 
    stackBuilder.addParentStack(ChatOneActivity.class); 
    stackBuilder.addNextIntent(intent); 
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, 
      PendingIntent.FLAG_CANCEL_CURRENT); 

    builder.setContentIntent(pendingIntent); 
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, builder.build()); 
} 

bauen Und auch mein Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.webmobilegroupchat" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="16" /> 

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.webmobilegroupchat.MainActivity" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="com.example.webmobilegroupchat.ChatActivity" 
     android:label="@string/title_activity_chat" > 
    </activity> 
    <activity 
     android:name="com.example.webmobilegroupchat.ChatOneActivity" 
     android:label="@string/title_activity_chat_one" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.webmobilegroupchat.ChatActivity" /> 
    </activity> 
    <activity 
     android:name="com.example.webmobilegroupchat.SplashActivity" 
     android:label="@string/title_activity_splash" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

Vielleicht, weil Sie den Activity-Stack wieder aufbauen? –

+0

nicht dieser Grund –

Antwort

1

Da Sie diesen Code genannt:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(ChatActivity.this); 
stackBuilder.addParentStack(ChatOneActivity.class); 
stackBuilder.addNextIntent(intent); 
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_CANCEL_CURRENT); 

TaskStackBuilder.create wird einen neuen TaskStackBuilder zum Starten eines neuen Aufgabenstapels zurückgeben, der aus einer Reihe von Aktivitäten besteht.

Ersetzen sie mit einem regelmäßigen PendingIntent wie diese gelöst es:

PendingIntent pendingIntent = PendingIntent.getActivity(context, (int)System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 
Verwandte Themen