Android: OnCreate () Как называются несколько раз (а не мной)

StackOverflow https://stackoverflow.com/questions/4299899

Вопрос

Есть что-то, что я не совсем понимаю прямо сейчас.

Мой главный класс активности создает сервис, который создает новую тему, которая ждет TCP-соединения. Когда-то придет, он начнет новую деятельность:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class);
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress());
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

После этого onCreate() Метод этого класса становится бегом. Он создаст 2 потока: одна запись и отправка данных, другой получают и воспроизводят данные. Эти потоки имеют вечно, пока цикла.

Почему-то я замечаю, что onCreate() Из этого последнего класса снова вызывается, что делает мою программу сбой. Я не понимаю, почему он снова вызывается как только 2 потока, нет взаимодействия пользователя. Документация говорит: «Вызывается, когда активность впервые создана». Активность уже работает, и я не пытаюсь его создать.

Может кто-нибудь, пожалуйста, объясните мне это поведение?

Это было полезно?

Решение

Android воссоздает вашу активность после определенного «изменения конфигурации устройства». Один из таких примеров является ориентация. Вы можете прочитать больше здесь...http://developer.android.com/guide/topics/resources/runtime-changes.html.

Возможно, что-то в ваших потоках делает что-то, что считается изменением конфигурации?

Если это так, вы можете обнаружить, что это полезно расширить класс приложений и выполнить там инициализацию. Смотрите этот пост ...Перезапуск активности на вращении Android

Емкость

Другие советы

Я испытывал активность, называемую дважды на некоторых устройствах Samsung. Я решил его добавить Android: LaunchMode = «одноконструкция» на метке активности на манифесте. Я надеюсь, что это может помочь.

Это произошло со мной один раз, когда я использовал «Не сохраняйте действия» в разделе приложения параметров разработчика. Убедитесь, что вы отпустили это.

Я заметил эту проблему, когда вы пытаетесь начать свою деятельность со значениями в намерениях.

Ниже приведен пример, где Activity_A вызывает Activity_B и передает значения в намерениях собираться в Activient_B:

Intent intent = new Intent(this, activityB.class);
intent.putExtra("val1", someValue1);
intent.putExtra("val2", someValue2);
intent.putExtra("val3", someValue3);
this.StartActivity(intent);

В этом случае вы можете установить android:launchMode="singleInstance" или android:launchModel="singleTop" В вашем androidmanifest.xml и Activity_b будут запущены только один раз. Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top