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