android - Activity is destroyed after coming back from camera app -


i have activity dialog. in dialog when click on imageview default camera app launches , when create photo , click tick icon (at least it's tick icon on phone) previous activity recreated, destroyed , recreated again. happens 1 in 10 times.

this happens

1. intent opens camera 2. onpause() 3. onsaveinstancestate runs 4. onstop() 5. ondestroy()  6. camera app opens, picture taken , click tick 7. onstart﹕() 8. onrestoreinstancestate runs 9. onresume() 10. onpause() 11. onsaveinstancestate 12. onstop() 13. ondestroy() 14. onstart﹕() 15. onrestoreinstancestate 

so if save data need in onsaveinstancestate (step 3) , retrieved in onrestoreinstancestate (step 8), it's lost when activity destroyed (i use flag decide if want save data , flag becomes null when activity recreated second time). save in sharedpreferences, still, undesired function want correct.

if matters, here's code:

intent

btn_camera.setonclicklistener(new view.onclicklistener() {    @override    public void onclick(view arg0) {    which_dialog = "complete";    complete_dialog.dismiss();    imagefileforcamera_ = gettemporarydirectory();    intent intentpicture = new intent(mediastore.action_image_capture);    if (imagefileforcamera_ != null) {       intentpicture.putextra(mediastore.extra_output, uri.fromfile(imagefileforcamera_));    } startactivityforresult(intentpicture,pick_from_camera_complete_kitkat); 

onactivityresult:

case pick_from_camera_complete_kitkat:   selectedimageuri = uri.fromfile(imagefileforcamera_);   complete_dialog.show();   (...more code...) 

onsaveinstancestate

@override protected void onsaveinstancestate(bundle outstate) {     super.onsaveinstancestate(outstate);     if (which_dialog != null && which_dialog.length() > 1) {        outstate.putstring("which_dialog", which_dialog);        outstate.putserializable(instance_state_image_file_for_camera, imagefileforcamera_);     } else {        log.i("onsaveinstancestate which_dialog", "which_dialog null");     } } 

onrestoreinstancestate

@override protected void onrestoreinstancestate(bundle savedinstancestate) {     super.onrestoreinstancestate(savedinstancestate);     if (savedinstancestate != null) {         if (savedinstancestate.containskey("which_dialog")) {            if (savedinstancestate.getstring("which_dialog").equals("complete")) {                complete_dialog = new completedialog(activity.this);                imagefileforcamera_ = (file)savedinstancestate.getserializable(instance_state_image_file_for_camera);             }         }     } else {          log.i("onrestoreinstancestate", "savedinstancestate null");     } } 

you saving which_dialog in onsaveinstancestate(). not restoring which_dialog in onrestoreinstancestate(). modify onrestoreinstancestate() set which_dialog based on value saved in onsaveinstancestate().


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

gradle error "Cannot convert the provided notation to a File or URI" -