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
Post a Comment