Можно ли отправить смс на статический IP-адрес?

Это классическая «игра» разработки Android. Здесь есть два вопроса:

  • Существует тонкая ошибка Android Framework, которая значительно усложняет управление стеком приложений во время разработки, по крайней мере, в устаревших версиях (не совсем уверен, когда / когда / как это было исправлено) , Я буду обсуждать эту ошибку ниже.
  • «Обычный» или предполагаемый способ решения этой проблемы сам по себе является довольно сложным с двойственностью onPause / onResume и onSaveInstanceState / onRestoreInstanceState

Просматривая все эти потоки, я подозреваю, что большую часть времени разработчики говорят об этих двух разных проблемах одновременно ... следовательно, вся путаница и сообщения «это не работает для меня».

Во-первых, для уточнения «предполагаемого» поведения: onSaveInstance и onRestoreInstance являются хрупкими и только для переходного состояния. Предполагаемое использование (afaict) - это обработка активности при повороте телефона (изменение ориентации). Другими словами, предполагаемое использование - это когда ваша активность по-прежнему логически «сверху», но все же должна быть восстановлена ​​системой. Сохраненный пакет не сохраняется за пределами процесса / памяти / gc, поэтому вы не можете положиться на это, если ваша деятельность переходит на задний план. Да, возможно, память вашей активности выдержит свою поездку на задний план и выйдет из GC, но это ненадежно (и это не предсказуемо).

Итак, если у вас есть сценарий, где есть смысл «пользовательский прогресс», или состояние, которое должно сохраняться между «запусками» вашего приложения, руководство должно использовать onPause и onResume. Вы должны сами выбрать и подготовить постоянный магазин.

НО - есть очень запутанная ошибка, которая усложняет все это. Подробности здесь:

http://code.google.com/p/android/issues/detail?id=2373

http : //code.google.com/p/android/issues/detail? id = 5277

В принципе, если ваше приложение запущено с флагом SingleTask, а затем вы запускаете его из главного экрана или меню запуска, то последующий вызов создаст новую задачу ... у вас будет фактически два разных экземпляра вашего приложения, населяющих один и тот же стек ..., который становится очень странным очень быстро. Это происходит, когда вы запускаете свое приложение во время разработки (т. Е. Из Eclipse или Intellij), поэтому разработчики часто сталкиваются с этим.

Я сражался через эти потоки в течение нескольких часов, прежде чем понял, что моей основной проблемой была эта ошибка, а не предполагаемое поведение каркаса , Отличный способ записи и обхода (UPDATE: см. Ниже), по-видимому, принадлежит пользователю @kaciula в этом ответе:

Домашнее нажатие клавиши

UPDATE Июнь 2013 г. : Через несколько месяцев я наконец нашел правильное решение. Вам не нужно самостоятельно управлять любыми флагами с установленными состояниями, а вы можете обнаружить это из фреймворка и поручиться соответствующим образом. Я использую это в начале моего LauncherActivity.onCreate:

if (!isTaskRoot()) {
    Intent intent = getIntent();
    String action = intent.getAction();
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && action != null && action.equals(Intent.ACTION_MAIN)) {
        finish();
        return;
    }
}

0
задан Hooman Bahreini 25 March 2019 в 03:23
поделиться