/ / Rodičovská aktivita sa normálne zastaví, ale nie po zmene orientácie - Android

Parent Activity sa normálne zastaví na zámku, ale nie po zmenách orientácie - android

Mám ukážkovú aplikáciu s dvoma aktivitami. Rodič sa spustí pri spustení aplikácie a Dieťa sa spustí pomocou tlačidla v Rodič. Dieťa je nastavené s priehľadným pozadím, aby sa pri spustení dieťaťa rodič nezastavil.

Spustím aplikáciu, ktorá spustí Rodič, potom spustím Dieťa. Potom zariadenie uzamknem. Vidím, že dieťa volá onStop (), potom rodič zavolá onStop ().

Ak však namiesto uzamknutia aplikácie rotujemzariadenie, ktoré vyvolá zmenu orientácie, potom, keď uzamknem aplikáciu, zavolá iba dieťa, ktoré volá OnStop (). Keď aplikáciu odomknem a kliknem na tlačidlo Späť, potom Dieťa aj Rodič zavolajú onStop (), takže Rodičovská aktivita je v tomto čudnom stave, v ktorom nie je viditeľná, ale nazýva onStop ().

  1. Prečo sa to deje?
  2. Ako môžem prinútiť rodičov, aby zavolali na službu OnStop (), keď je zariadenie uzamknuté?

Vytvoril som jednoduchý projekt pre Android, ktorý demonštruje problém, ktorý vidím.

https://github.com/skykelsey/Rotation

odpovede:

1 pre odpoveď č. 1

To je to, čo dostávam na zariadení Nexus 5 (Android 5.0.1), ak áno launch the app -> start ChildActivity -> rotate the device -> lock the device -> unlock the device:

E/ROTATION﹕ ParentActivity.onStart()
E/ROTATION﹕ Orientation: portrait
E/ROTATION﹕ ChildActivity.onStart()
E/ROTATION﹕ Orientation: portrait
E/ROTATION﹕ ChildActivity.onStop()
E/ROTATION﹕ ChildActivity.onStart()
E/ROTATION﹕ Orientation: landscape
E/ROTATION﹕ ParentActivity.onStop()
E/ROTATION﹕ ParentActivity.onStart()
E/ROTATION﹕ Orientation: landscape
E/ROTATION﹕ ChildActivity.onStop()
E/ROTATION﹕ ChildActivity.onStart()
E/ROTATION﹕ Orientation: portrait
E/ROTATION﹕ ParentActivity.onStop()
E/ROTATION﹕ ParentActivity.onStart()
E/ROTATION﹕ Orientation: portrait
E/ROTATION﹕ ChildActivity.onStop()
E/ROTATION﹕ ChildActivity.onStart()
E/ROTATION﹕ Orientation: landscape
E/ROTATION﹕ ParentActivity.onStop()
E/ROTATION﹕ ParentActivity.onStart()
E/ROTATION﹕ Orientation: landscape

t. j. nemôže reprodukovať problém, ktorý ste opísali. V skutočnosti je normálne, ak nevidíte onStop() občas, pretože nie je zaručené, že bude volaná.

chránená neplatnosť OnStop ()

Uvedomte si, že táto metóda sa nemusí volať nikdy, v situáciách s nedostatkom pamäte, kde systém nemá dostatok pamäte, aby udržal proces vašej činnosti v prevádzke aj po vyvolaní metódy onPause ().

Prečítajte si tiež tabuľku životného cyklu aktivity uvedenú na tejto stránke:

Tabuľka životného cyklu aktivity

Zvýraznený text znie ako

Všimnite si stĺpec „Killable“ v tabuľke vyššie -v prípade tých metód, ktoré sú označené ako usmrtiteľné, potom, čo táto metóda vráti proces, ktorý môže byť hostiteľom činnosti, môže systém kedykoľvek zabiť bez vykonania iného riadku jeho kódu. Z tohto dôvodu by ste mali pomocou metódy onPause () zapisovať do úložiska akékoľvek trvalé údaje (napríklad úpravy používateľov)..

To znamená, že ak vykonávaná operácia je dôležitá, mali by ste ju použiť onPause() radšej než onStop().

Dúfam, že to pomôže.