2016-08-30 18 views
5

Tôi có hai hoạt động, ChatActivityChatOneActivityTại sao onDestroy() được gọi khi tôi bắt đầu một thông báo? Làm thế nào để ngăn chặn nó?

Tôi muốn xây dựng một thông báo trong ChatActivity, và khi tôi nhấn thông báo, tôi thấy phương pháp onDestroy() được gọi. Tại sao? Tôi có thể hiểu tại sao phương thức onStop được gọi, vì chế độ xem không còn hiển thị nữa. Nhưng onDestroy()? Tại sao? Tôi đã không hoàn thành ChatActivity!

Làm cách nào để ngăn chặn? Tôi chỉ muốn phương pháp onStop để được gọi, tôi không muốn Hoạt động bị giết.

Sau đây là cách tôi xây dựng thông báo

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

Và cũng tôi 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

Có lẽ bởi vì bạn đang xây dựng lại các Hoạt động ngăn xếp? –

+0

không phải lý do này –

Trả lời

1

Bởi vì bạn gọi mã này:

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

TaskStackBuilder.create sẽ trả về một TaskStackBuilder mới để khởi chạy một ngăn tác vụ mới bao gồm một loạt các hoạt động.

Thay thế chúng bằng một pendingintent thường xuyên như thế này giải quyết nó:

PendingIntent pendingIntent = PendingIntent.getActivity(context, (int)System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 
Các vấn đề liên quan