Предотвратете унищожаването на дейността

Изпращам намерение към камерата от дейност, която наричам така:

 Intent testphoto = new Intent(Dashboard.this,CameraHandler.class);
 startActivity(testphoto);

В клас CameraHandler наричам камерата:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0);

Но преди onActivityResult да бъде извикан в CameraHandler класа, дейността се унищожава. Има ли начин да се предотврати това?

НАМЕРИХ ОТГОВОРА: Имах noHistory="true" в моя AndroidManifest и това накара ОС да унищожи активността преди резултата.


person Diego    schedule 02.05.2012    source източник
comment
откъде знаеш, че се унищожава?   -  person dymmeh    schedule 02.05.2012
comment
Сложих Log в метода OnDestroy(), пробвах едно приложение само с една дейност и то работи добре, но когато започна да използвам това в по-сложно приложение, активността се унищожава, преди камерата да върне изображението   -  person Diego    schedule 02.05.2012
comment
Ако сте намерили свой собствен отговор, публикувайте го и приемете собствения си отговор, за да затворите въпроса. Благодаря ти.   -  person davidcesarino    schedule 02.05.2012


Отговори (3)


Уверете се, че не сте включили настройката за разработчици „Не запазвай дейности“, тъй като тя ще унищожи дейността, която напускате.

person Omaraf    schedule 17.11.2013
comment
QA съобщи за проблем - успях да го възпроизведа само на телефона, който използват. Не можах да разбера защо дейността ket излиза! Не знаех за тази настройка, докато не видях коментара ви. Благодаря :) - person ajh158; 17.10.2014
comment
беше само на моя таблет.. проблемът...благодаря приятел +1 - person asok Buzz; 28.09.2015
comment
+100. Защо това изобщо е опция? Има толкова много странични ефекти! - person Lukas Knuth; 27.10.2015
comment
Благодаря ти много. Мъчих се, опитвайки се да разбера защо започва да се унищожава на моя телефон, докато в емулатора не е. - person jelmood jasser; 16.07.2016
comment
Някои проблеми са толкова натрапчиви....Трябва да има филм за завистта към кода на програмиста.... - person nobalG; 19.09.2016
comment
Това не работи, тъй като и аз не съм активирал тази опция :( - person blueware; 10.01.2017
comment
Леле, какъв е смисълът от тази опция, полудях, опитвайки се да разбера това - person marchinram; 05.04.2017

Не е нужно да се притеснявате, че извикващият Activity ще бъде унищожен, когато извикате startActivityForResult(), тъй като това изобщо няма да промени очакваното поведение (т.е. дъщерната дейност ще запомни да предаде резултата обратно на родителя, независимо дали родителят е унищожен или не). Вижте тази публикация.

Също така имайте предвид, че въпреки че понякога е необходимо да се предотврати унищожаването на Activitys (т.е. при промени в конфигурацията и т.н.), по принцип искате да оставите жизнения цикъл на Activity сам и да оставите системата да управлява фоновите Activitys вместо вас. След като стартирате нов Activity, не трябва изрично да предотвратявате унищожаването на предишни Activity.

person Alex Lockwood    schedule 02.05.2012
comment
Единственото нещо е, че изведнъж onActivityResult никога не се извиква, когато имам приложение само с една дейност, дейността никога не се унищожава, но onActivityResult се извиква, сега, когато вътре в друго приложение внезапно дейността се унищожава и резултатът изглежда никога не се връща. Някаква идея как може да стане това? - person Diego; 02.05.2012
comment
Може би нещо не е наред с работния ви процес. Изглежда странно, че се обаждате на startActivityForResult() два пъти. Определено трябва да извикате startActivityForResult(), когато стартирате действителното приложение за камера, но не съм толкова сигурен, че имате нужда от него за класа CameraHandler. Какво все пак е класът CameraHandler? Възможно ли е да стартирате приложението за камера директно от таблото? - person Alex Lockwood; 02.05.2012
comment
Имам нужда от екран между тях, така че директно от таблото за управление не е опция, открих, че startActivityForResult ще предотврати унищожаването на активността, но не го прави, така че наистина бих могъл да премахна и това. Camerahandler изпраща намерението към камерата и качва снимка на резултат от дейността, което не прави сега. - person Diego; 02.05.2012
comment
Добре, за да е ясно... премахнахте ли обаждането startActivityForResult() от таблото си за управление? (може да искате да актуализирате оригиналната си публикация). - person Alex Lockwood; 02.05.2012
comment
Погледнахте ли това? Не мога да ви кажа със сигурност какво не е наред с вашия код въз основа на информацията, която сте ми дали, но мога да ви кажа, че нещо определено не е наред, ако onActivityResult никога не се извиква, когато Activity се върне. Вижте примерния код тук и вижте дали помага. - person Alex Lockwood; 02.05.2012
comment
благодаря, дано намеря нещо. Публикувах целия клас на camerahandler. - person Diego; 02.05.2012
comment
@AlexLockwood здравей, можеш ли да ми кажеш правилния начин за стартиране на дейност, startActivityForResult, изправен съм пред същия проблем само защото дейността е убита - person Ando Masahashi; 21.11.2014
comment
няма да промени очакваното поведение - със сигурност може. ако запазите състояние във вашата дейност и не запазите това състояние. - person Jeffrey Blattman; 10.10.2015

Трябва да споменете във вашия манифест като

 android:persistent="true"

Под SO публикациите отговарят на същия въпрос

Как да накарате дадена дейност да спре, вместо да бъде унищожена, от клавиша НАЗАД?

Как да предотвратите извикването на onDestroy() след onPause() ?

Предотвратете дейността да бъде унищожена възможно най-дълго

person Aravind.HU    schedule 04.03.2016
comment
Този атрибут не съществува за дейности: developer.android.com/guide/ теми/манифест/ - person jekatt; 20.08.2016
comment
@jekatt съществува developer.android.com/guide/topics/manifest / - person Aravind.HU; 22.08.2016
comment
Това е за приложението, а не за дейността. - person Georgi Dimitrov; 21.06.2019