Saturday, January 8, 2011

[android-developers] Re: How to interrupt a blocking I/O operation?

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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate