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

Reply via email to