Android - Загуба на обхват на UI елементи след onDestroy()

Опитвам се да се справя с проблеми, които възникват в моето приложение, когато телефонът е включен в определени типове зарядни устройства и е поставен в „Режим за кола“ или „Режим за шофиране“.

В работещото приложение се извиква onDestroy() и веднага следва onCreate() и приложението стартира отново нормално. Въпреки това последващите извиквания за актуализиране на елементи на потребителския интерфейс (в новосъздадената основна дейност) вече нямат ефект и изглежда, че съм загубил обхват на моето оформление.

    RelativeLayout splash = (RelativeLayout) findViewById(R.id.splash);
    splash.setVisibility(View.VISIBLE);

Какво може да се случи onDestroy(), което не отчитам? Не правя много почистване на Destroy, защото не смятах, че имам нужда.


person TomBomb    schedule 21.02.2012    source източник
comment
Имам същия проблем. Решихте ли го?   -  person takluiper    schedule 12.04.2017


Отговори (2)


Activity е бил отделен от потребителския интерфейс до момента, в който onDestroy() е извикан, така че извикванията на потребителския интерфейс към него няма никакъв смисъл. Ако искате цветното изображение да се показва, задайте го на View.VISIBLE в onCreate(), onResume() или може би onPause(). Не съм съвсем сигурен дали onPause() би постъпил по различен начин.

person DeeV    schedule 21.02.2012
comment
За съжаление извикванията на потребителския интерфейс, за които имам предвид, се появяват в новата дейност след новото извикване на onCreate - person TomBomb; 22.02.2012
comment
В такъв случай извиквате ли setContentView(), за да създадете нов екземпляр на оформлението? Старият е част от стария Activity's контекст и е унищожен, така че имате нужда от нов. - person DeeV; 22.02.2012
comment
Да, извиквам setContentView() отново, не правя нищо различно от начина, по който обикновено бих инстанцирал основната дейност - person TomBomb; 22.02.2012

Когато телефонът се завърти, дейността се унищожава и пресъздава. Включването в зарядно за кола обикновено принуждава телефона да премине в пейзажен режим, като по този начин го завърта (от портрет, най-вероятно) и извиква onDestroy. Има начин да предотвратите това поведение с някои флагове за активност, но Google съветва да не го правите.

Трябва да видим още код за тази дейност, за да разберем какво се случва.

Освен това, както посочва DeeV, дейността отдавна е изчезнала до момента, в който onDestroy бъде извикан, така че може да не е правилното място да правите каквото и да правите - но имаме нужда от повече код, за да сме сигурни.

Като странична бележка, плъзгането на клавиатурата нагоре (на телефони, които имат плъзгащи се клавиатури) ще доведе до същия ефект.

person debracey    schedule 03.03.2012
comment
Да, виждал съм това поведение в миналото. Промених основната си дейност, така че splash да не е оформление, което се показва, а нова дейност сама по себе си. Въпреки това все още виждам проблеми, тъй като след като приложението ми е onDestroy()/onCreated, извикването на finishActivity(AppState.ACTIVITY_SPLASH) няма ефект. - person TomBomb; 07.03.2012