Швидкий фон
За замовчуванням, коли на Android відбувається певна зміна ключових конфігурацій (поширений приклад - зміна орієнтації), Android повністю перезапускає запущену діяльність, щоб допомогти їй пристосуватися до таких змін.
Коли ви визначаєте android:configChanges="keyboardHidden|orientation"
у своєму AndroidManifest, ви говорите Android: "Будь ласка, не робіть скидання за замовчуванням, коли клавіатура виймається або телефон повертається; я хочу сам впоратися з цим. Так, я знаю, що я роблю "
Це гарна річ? Незабаром ми побачимо ...
Не хвилюйтесь?
Одним із плюсів, з якого ви починаєте, є те, що є:
не потрібно турбуватися про те, що ваша діяльність обертається
У багатьох випадках люди помилково вважають, що коли у них виникає помилка, яка створюється зміною орієнтації ("обертання"), вони можуть її просто виправити, ввівши android:configChanges="keyboardHidden|orientation"
.
Однак android: configChanges = "keyboardHidden | орієнтація" - це не що інше, як bandaid. По правді, існує багато способів зміни конфігурації. Наприклад, якщо користувач вибирає нову мову (тобто змінено локаль), ваша активність буде відновлена так само, як це відбувається шляхом зміни орієнтації. Якщо потрібно, ви можете переглянути список різних типів змін конфігурації .
Редагувати : Що ще важливіше, проте, як в коментарях зазначає хакбод , ваша активність також буде відновлена, коли ваша програма буде у фоновому режимі, і Android вирішить звільнити деяку пам’ять, убивши її. Коли користувач повернеться до вашої програми, Android спробує перезапустити діяльність так само, як це робиться, якщо відбулася якась інша зміна конфігурації. Якщо ви не можете впоратися з цим - користувач не буде задоволений ...
Іншими словами, використання android:configChanges="keyboardHidden|orientation"
не є рішенням для ваших «турбот». Правильний спосіб - це кодувати свою діяльність, щоб вони були задоволені будь-яким перезавантаженням кидків Android. Це хороша практика, яка допоможе вам в дорозі, тому звикайте.
То коли я повинен його використовувати?
Як ви вже згадували, є явна перевага. Перезапис зміни конфігурації за замовчуванням для обертання, обробляючи його самостійно, прискорить роботу. Однак ця швидкість дійсно має ціну зручності.
Простіше кажучи, якщо ви використовуєте однаковий макет і для портрета, і для пейзажу, ви перебуваєте в хорошій формі, роблячи перезапис. Замість повномасштабного перезавантаження діяльності погляди просто зміняться навколо, щоб заповнити залишився простір.
Однак якщо ви з якоїсь причини використовуєте інший макет, коли пристрій знаходиться в ландшафтному режимі, той факт, що Android перезавантажує вашу активність, добре, оскільки він завантажить правильний макет. [Якщо ви використовуєте переопрацювання для такої діяльності та хочете зробити якийсь магічний перепланування під час виконання ... ну, удача - це далеко не просто]
Швидкий підсумок
У будь-якому випадку, якщо android:configChanges="keyboardHidden|orientation"
вам підходить, тоді використовуйте його. Але ЗАБУДУЮТЬСЯ , щоб перевірити, що відбувається, коли щось змінюється, оскільки зміна орієнтації - не єдиний спосіб повного перезапуску активності.