Актыўнасць з дыялогам запускаецца толькі адзін раз на некалькі выклікаў startActivity

У мяне ёсць цікавая праблема. У мяне ёсць рэалізацыя сэрвісу ў маім Android App, які сінхранізуецца з серверам, і калі прыходзіць новы заказ, ён адлюстроўвае апавяшчэнне і дыялог з SHO кнопак/Адхіліць. Таму што мне трэба, каб адлюстраваць дыялогавае акно, незалежна ад актыўнасці ў цяперашні час працуе, я рэалізаваў яго ў іншым выглядзе дзейнасці А Пачынайце гэтую ад службы, калі з'яўляецца новы заказ.

Дзейнасць не ўстанаўлівае які-небудзь від, проста стварае AlertDialog. Кнопка SHOW запускае OrdersListActivity, і кнопка Зачыніць проста закрывае дыялогавае акно. Усё працуе выдатна, але толькі ў першы раз. Калі я зачыніць дыялогавае акно, а іншы заказ прыходзіць, яно адлюстроўваецца зноў. Аднак, калі я націсну на кнопку SHOW, ён адлюстроўвае OrdersList але калі іншы заказ прыходзіць пазней, не адлюстроўваецца дыялогавае акно. Хоць, па словах LogCat, дзейнасць пачынаецца. Я важдацца з гэтым на працягу некалькіх гадзін ужо, не маглі б вы мне дапамагчы? Дзякуючы.

Вось метад з майго класа Service (робіць апавяшчэнне, пасылае ў эфір і пачаць Дыялог дзейнасці):

грамадскага несапраўдны notifyNewOrder() {

    Context context = getApplicationContext();

    Intent notificationIntent = new Intent(this, OrdersService.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);

    newOrderNotification.setLatestEventInfo(this, getString(R.string.notification_text), getString(R.string.notification_text), contentIntent);
    notificationManager.notify(NOTIFICATION_ID, newOrderNotification);


    Intent intent = new Intent(NEW_ORDER_RECEIVED);
    sendBroadcast(intent);

    Intent dialog = new Intent(context, NotificationDialog.class);
    dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(dialog);

}

Вось код класа NotificationDialog дзейнасці:

грамадскі клас NotificationDialog пашырае актыўнасць {

private static final int DIALOG_NEW_ORDER = 0;
private static final String LOG_TAG = "NotificationDialog"; 

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    Log.d(LOG_TAG, "onCreate - creating activity...");

}

@Override
public void onResume() {

    super.onResume();
    Log.d(LOG_TAG, "onResume - starting the dialog...");
    showDialog(DIALOG_NEW_ORDER);

}



@Override
protected Dialog onCreateDialog(int id) {

    Dialog dialog;

    switch(id) {
        case DIALOG_NEW_ORDER:

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.notification_dialog_new_order)
                   .setCancelable(false)
                   .setPositiveButton(R.string.notification_dialog_show, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            /*
                            * Cancel the notification
                            */
                            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                            notificationManager.cancel(OrdersService.NOTIFICATION_ID);                              

                            /*
                             * Go to the list
                             */
                            Intent listIntent = new Intent(getApplicationContext(), OrdersListActivity.class);
                            startActivity(listIntent);

                            dialog.dismiss();
                            finish();

                        }

                   })
                   .setNegativeButton(R.string.notification_dialog_dismiss, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            /*
                             * Cancel the notification
                             */
                            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                            notificationManager.cancel(OrdersService.NOTIFICATION_ID);
                            dialog.dismiss();
                            finish();
                        }
                   });

            dialog = builder.create();

            break;        
        default:
            dialog = null;
    }

    return dialog;
}

}

Я дадаў некаторыя часопісы ў метадах OnCreate і onResume ў NotificationDialog дзейнасці і высветліў наступнае:

  1. У першы раз запускаецца NotificationDialog актыўнасці, гэтыя адладкавыя паведамлення раздрукоўваюцца
  2. У другі раз, і ўсё астатняе час, яны не будуць адлюстроўвацца, хоць LogCat кажа: 10-28 10: 00: 38,074: INFO/ActivityManager (63): Пачатак: Намер {FLG = 0x10000000 = CMP пл .mymeal.orders/.services.NotificationDialog} з PID 1001
0
Выдатна, што на самой справе працаваў. Я думаю, што я павінен больш уважліва паглядзець на сцягах актыўнасці. Дзякуючы яшчэ раз.
дададзена аўтар Filip Majernik, крыніца
Зменіце сцяг FLAG_ACTIVITY_CLEAR_TOP
дададзена аўтар Nikola Despotoski, крыніца
Калі гэта спрацавала. Я пераехаў мой каментар як адказ і калі ласка, прыміце яго :)
дададзена аўтар Nikola Despotoski, крыніца

1 адказы

Зменіце сцяг FLAG_ACTIVITY_CLEAR_TOP . Проста ў галаве, што няма ніякай прыхільнасці новых дадзеных ад сервера.

2
дададзена