Жизненный цикл активности ведет себя по-другому JellyBean и далее

У меня следующий сценарий. Действие A запускает действие B. B запускает уведомление, нажав на которое запускается другое действие C. Теперь поведение отличается на Gingerbread и ICS. В случае Gingerbread, когда я нажимаю на уведомление, наблюдается ожидаемое поведение, однако, когда я запускаю тот же код в ICS или JellyBean, когда я нажимаю на уведомление, действие A уничтожается (вызывается OnDestroy). Почему поведение жизненного цикла отличается. Как я могу заставить его работать одинаково на всех устройствах? Пожалуйста, предложите.

    public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.v("MyLog","Activity A created");
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.v("MyLog","Activity A destroyed");

        }
        public void startB(View v)
        {
            Intent intent=new Intent(getApplicationContext(),B.class);
            startActivity(intent);
        }

        protected void onStop()
        {
            super.onStop();
            Log.v("MyLog","Activity A stopped");
        }

        protected void onResume()
        {
            super.onResume();
            Log.v("MyLog","Activity A resumed");
        }


    }
}

public class B extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b);
        Log.v("MyLog","Activity B created");
    }

    protected void onStop()
    {
        super.onStop();
        Log.v("MyLog","Activity B stopped");
    }

    protected void onResume()
    {
        super.onResume();
        Log.v("MyLog","Activity B resumed");
    }

    public void startNotification(View v)
    {
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(getApplicationContext())
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setAutoCancel(true);



        // Creates an explicit intent for an Activity in your app
        Intent resultIntent = new Intent(getApplicationContext(), C.class);

        // The stack builder object will contain an artificial back stack for the
        // started Activity.
        // This ensures that navigating backward from the Activity leads out of
        // your application to the Home screen.
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
        // Adds the back stack for the Intent (but not the Intent itself)
        stackBuilder.addParentStack(C.class);
        // Adds the Intent that starts the Activity to the top of the stack
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // mId allows you to update the notification later on.
        int mId=1;
        mNotificationManager.notify(mId, mBuilder.build());
    }
}

public class C extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.c);
        Log.v("MyLog","Activity C created");
    }
    protected void onStop()
    {
        super.onStop();
        Log.v("MyLog","Activity C stopped");
    }

    protected void onResume()
    {
        super.onResume();
        Log.v("MyLog","Activity C resumed");
    }
}



Ответы (1)


Система может прекратить деятельность всегда, когда это необходимо. Вероятно, это не просто разница между версиями Android, а разница между разными устройствами / объемом свободной памяти для разных версий Android.

person piotrpo    schedule 21.01.2013
comment
Да, я согласен, но тогда я могу ожидать, что он будет вести себя по-разному, по крайней мере, иногда, но каждый раз я получаю один и тот же результат, я проверил то же самое с двумя версиями эмуляторов, один создан с Android 2.3.3, а другой с 4.1 .2. Каждое действие A уничтожается в устройстве/эмуляторе 4.1.2. В Руководстве разработчика нет упоминания об этом поведении. Вот что меня озадачивает. - person Ricky; 22.01.2013
comment
Вы можете проверить то же самое с кодом, который я разместил, дайте мне знать, если вы наблюдаете то же самое. - person Ricky; 22.01.2013
comment
Не знаю почему - извините. Документы говорят, что все в фоновом режиме может быть уничтожено в любой момент, включая службы переднего плана. Разве вы не используете большие растровые изображения в своем макете или какие-то другие большие объекты памяти? - person piotrpo; 22.01.2013
comment
Ничего подобного, просто TextView и Button. Да, я знаю, что документы говорят, что его можно убить, но случай, о котором я говорю, скорее будет убит, поскольку это происходит каждый раз. Его последовательное поведение - person Ricky; 22.01.2013