Nano Hash - криптовалюты, майнинг, программирование

При изменении ориентации экрана создается новое действие

Я относительно новичок в Android, но за последний год сделал довольно много приложений, так что простите меня.

Я знаю, что когда вы запускаете приложение на устройстве и меняете ориентацию экрана, поворачивая устройство, отображаемая активность полностью воссоздается. Я захожу в приложение YouTube (я использую Nexus 7 с Android 4.2.2) и проигрываю видео, а затем переворачиваю экран, чтобы изменить ориентацию. Видео продолжает воспроизводиться, и все изменяется соответствующим образом... Как это возможно, если действие полностью воссоздано?

Спасибо.


Ответы:


1

В вашем AndroidManifest.xml добавьте android:configChanges, и это позволит избежать повторного создания активности при изменении ориентации. Я надеюсь, что ваш альбомный и портретный режимы имеют одинаковую компоновку.

    <activity android:label="Your Activity Name" 
    android:configChanges="keyboardHidden|orientation|screenSize"
      android:name="com.yourpackage">

Чтобы добавить к этому больше, я бы посоветовал вам взглянуть на методы onPause() и onResume(), и если вы играете с фрагментами, то обратите внимание на onSaveInstanceState и onRetainInstanceState, а не применяйте изменения xml, поскольку «Активность уничтожается по замыслу. "

http://developer.android.com/training/basics/activity-lifecycle/index.html

07.04.2013
  • Это плохой совет ... приложения должны сохранять свое состояние, чтобы они могли обрабатывать изменения вращения, а также ОС, пожинающие их память (когда пользователь уходит на некоторое время). Использование этого метода действительно предназначено для сложных приложений, которые слишком дороги для перезапуска при чередовании, что не относится к большинству приложений. 07.04.2013
  • @StevenByle: я согласен с вами, я четко указал жизненный цикл активности, на который следует обратить внимание в своем посте, потому что активность уничтожена по замыслу. 07.04.2013
  • Этот метод используется огромным процентом всех приложений на рынке. Целое уничтожение активности и перезапуск ее по очереди было огромной ошибкой Google - это сбивает с толку, вызывает ошибки и является большим источником боли для программиста. Тот факт, что им пришлось внедрить не один, а два хака, чтобы обойти это, доказывает, что это просто плохая идея. Если ваше приложение не нуждается в этой функциональности, потому что оно имеет полностью отдельные макеты в альбомном и портретном режимах, это правильный способ исправить это — полностью избежать плохих идей Google, и они в конечном итоге поймут, что облажались, и изменят его. 07.04.2013
  • У него должны быть макеты для портрета и ландшафта. Предположим, что видео имеет продолжительность 10 минут. Играет 5 минут меняет ориентацию. Сохраните это состояние, переопределив onSaveInstanceState (Bundle outState) и восстановив его в onRestoreInstanceState (Bundle saveInstanceState) 07.04.2013
  • @Raghunandan: это то, как вы должны идти, но я действительно не понимаю, почему у него разные макеты как для альбомного, так и для портретного режима. 07.04.2013
  • @GabeSechan вздох... если вы правильно сохраните свое состояние (которое вы должны сделать, чтобы восстановиться после того, как ОС уничтожит ваш Activity в ситуациях с нехваткой памяти, или приложение не будет возвращено в течение некоторого времени), вы уже закроете перезапуск при повороте, нет необходимости добавлять этот чит в свой манифест. Выступать против рекомендаций Google (КТО НАПИСАЛ ОС LOL) совершенно глупо. Радуйтесь, что Google не отвергает такие приложения, как Apple, вашего, вероятно, не будет в Play Store ;). 07.04.2013
  • @Vinothbabu layout-port : макет для портретной ориентации layout-land : макет для альбомной ориентации. Обеспечить правильную высоту и ширину макетов 07.04.2013
  • @Raghunandan: я понимаю, рагу, но как вы сказали, что видеоконтент будет иметь как портретное, так и альбомное расположение ... я бы сказал, что это предположение, поскольку ОП ничего не опубликовал по этому поводу. 07.04.2013
  • @StevenByle Если мое приложение будет убито из-за нехватки памяти, я бы предпочел перезапустить его с нуля. Попытка перезапустить его из сохраненного состояния ненадежна, содержит ошибки и почти никогда не является правильным решением. То, что Google написала ОС, не означает, что они все сделали правильно. Это было серьезной ошибкой. Просто избегать всей чертовой проблемы — правильно, поэтому большинство собственных приложений Google используют его. 07.04.2013
  • @StevenByle: Google тоже не может, сегодня я читал эту статью bitboxer.de/2012/09/01/ в буквальном смысле это правда... некоторые вещи на андроиде сделать очень сложно. 07.04.2013
  • @Vinothbabu попробуйте воспроизвести видео с YouTube на своем устройстве, изменив ориентацию устройства. Ты узнаешь. 07.04.2013
  • @GabeSechan, это то, чего вы не получаете, все приложение будет убито, если вы оставите его достаточно долго (и перезапустите), но, скажем, вам звонят, когда вы что-то делаете, во время этого звонка могла быть занята только одна память Activity. дать приложение для телефона. Теперь, когда вы вернетесь, пользователь ожидает, что он будет там, где он был, перезапуск всего приложения будет происходить постоянно и будет раздражать. С сохранением/восстановлением Android позволяет устройствам работать так, как будто у них гораздо больше оперативной памяти, чем на самом деле, это довольно новаторски. Кроме того, я сохраняю / восстанавливаю состояние в приложении с более чем 50 000 строк с более чем 500 000 пользователей ... работает нормально ... 07.04.2013
  • Это не новаторство, это сломанная идея. Дело не в том, как работают программы, дело не в том, как работают операционные системы, это требует большой утомительной работы от разработчика и, скорее всего, сломается, потому что разработчик что-то упускает, и это даже не то, что ожидает пользователь (действительно, спросите не- технический пользователь, если они ожидают, что приложение останется в том же состоянии после того, как покинет его в течение нескольких часов. Никто из них этого не делает, они думают, что когда они наносят ответный удар, оно закрывается). Я также не хочу, чтобы это сохранялось — это ужасная идея по соображениям безопасности. Поэтому они реализуют плохую идею, чтобы сделать возможной другую плохую идею. Спасибо, не надо. 07.04.2013
  • Смеяться вслух, читая это... 1. Когда вы наносите ответный удар, он выходит (не сохраняет состояние). 2. Через несколько часов приложение почти всегда будет убито и перезапущено. Состояние сохранения — это меньшие временные рамки, чем это. 3. Сохраненные состояния не сохраняются и полагаются на функции безопасности отдельных процессов в Linux, что очень безопасно. Понятно, что вы понятия не имеете, почему ОС даже перезапускает действия при изменении конфигурации, чтобы позволить приложениям предоставлять определенные ресурсы конфигурации. Если бы он не перезапустил их, вам пришлось бы обрабатывать каждый конкретный ресурс конфигурации в коде (ваша глупая идея). 07.04.2013

  • 2

    Если вы беспокоитесь о потере значения локальных переменных в своей деятельности... Вы можете использовать шаблон Singleton для некоторых из этих переменных. Это не красивое решение, но может сработать.

    16.11.2014
  • Этот ответ не имеет ничего общего с вопросом. 16.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..