broadcastreceiver - preventing a crash when someone mounts an Android SD card -
i have file open on sd card. when mounts sd card, winds crashing application. trying register action_media_eject broadcast event, , receive that, seems i'm getting late. time that, it's crashed application. there way notified before crashing application?
added simple sample code. when this, winds crashing service when turn on usb (msc mode).
test.java
/** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); try { startservice(new intent(this, testservice.class)); bindservice(new intent(this, testservice.class), serviceconnection, context.bind_auto_create); } catch (exception e) { } } protected testservice testservice; private serviceconnection serviceconnection = new serviceconnection() { @override public void onserviceconnected(componentname name, ibinder service) { testservice.localbinder binder = (testservice.localbinder) service; testservice = binder.getservice(); } @override public void onservicedisconnected(componentname name) { testservice = null; } };
testservice.java
@override public void oncreate() { super.oncreate(); try { mfileoutputstream = new fileoutputstream("/sdcard/test2", true); } catch (exception e) { } } @override public ibinder onbind(intent intent) { return binder; } public static class localbinder extends binder { public static testservice getservice() { return _this; } }
it killing application because documented design decision in android kill process holding open handle sdcard when sdcard needs unmounted device (for example usb mounted connected pc).
a file system still has open file handles cannot cleanly unmounted. @ operating system level, there's no way revoke file handle, short of killing process granted, android does.
Comments
Post a Comment