Android: OnCreate () Как называются несколько раз (а не мной)
-
29-09-2019 - |
Вопрос
Есть что-то, что я не совсем понимаю прямо сейчас.
Мой главный класс активности создает сервис, который создает новую тему, которая ждет 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 будут запущены только один раз. Надеюсь это поможет.