I ended up NOT going with an interrupt, as it seemed to be (as Bob explained) a crap-shoot. Instead when a user wants to stop an I/O - connection operation I orphan the the blocking thread and set it to die on it's next loop. Since most of the resources are released by the non-blocking thread anyways, an IOException is usually thrown and cleanup of the blocking thread happens pretty quickly.
Thanks for all the great suggestions! On Jan 8, 11:16 pm, Bob Kerns <r...@acm.org> wrote: > Well, there's interrupting the IO loop, and there's backing out of the > blocked IO system call. > > GENERALLY SPEAKING, you won't be able to force an ARBITRARY OS to give > you back control if it's actually in a blocked IO system call. > > If you can on a specific OS, and it improves your app in some way > that's worth the complexity, then great. But I recommend avoiding it > as a design requirement! What may work on one platform may not work on > another. > > That's why I suggest the default position is "you can't do that". If > you can, you should view it as a nice optimization. Optimizations come > with costs; if it's worth the complexity and potential for bugs and > corresponding testing burden -- go for it. > > But first design your application to work as well as it can without > relying on it. > > Then figure out if you even need it. > > On Jan 7, 11:57 am, Streets Of Boston <flyingdutc...@gmail.com> wrote: > > > In my experience, if you use AsynTasks (or Future<?> instances) to do > > your HTTP I/O in the background, calling "cancel(true)" on these > > instances will interrupt the HTTP I/O. > > > If i'm not mistaken, the apache HttpClient is sensitive to calling > > interrupt() on the thread on which it is doing HTTP I/O. > > > On Jan 7, 12:07 pm, ivan <istas...@gmail.com> wrote: > > > > I'm wondering what the currently suggested method is for interrupting > > > a read operation of a socket input stream? > > > > I know that traditionally the read could be interrupted by closing the > > > socket from another thread and catching an IOException, but I'm not > > > quite sure how to get at the socket from the apache classes. > > > > Maybe I should use some sort of interruptible channel instead ... ? > > > > Any links or help is greatly appreciated. > > > > My code looks like this -- minus most of the error handling: > > > > org.apache.http.impl.client.DefaultHttpClient > > > org.apache.http.client.methods.HttpGet > > > org.apache.http.HttpResponse > > > > DefaultHttpClient client = new DefaultHttpClient(httpParameters); > > > > HttpGet request = new HttpGet(Uri); > > > > HttpResponse response = client.execute(request); > > > > InputStream entityStream = response.getEntity().getContent(); > > > > try > > > { > > > bytesRead = entityStream.read(data);} > > > > catch (IOException ex) > > > { > > > > }- Hide quoted text - > > > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en