There should be no major rearchitecting required; just put the long-running
operation in another thread.  Using AsyncTask makes this extremely easy.

On Tue, Jun 23, 2009 at 9:27 PM, Craig <supkic...@gmail.com> wrote:

>
> On Tue, Jun 23, 2009 at 9:51 PM, Mike Hearn<mh.in.engl...@gmail.com>
> wrote:
> >
> > it's a bit hard to figure out what you want from this email, I assume
> > you're talking about this:
> >
> >
> http://www.google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#3aMARKchqsQ/trunk/AndroidTTS/src/android/tts/Tts.java&q=TTS%20android
>
> Yes, that's it.
>
> > I agree this API is a bit questionable, but I don't see the problem.
> > You can't block inside the function you pasted if it's run from the
> > main thread, that'll make your service ANR.
>
> Yes, I realise it will ANR - that's what I am trying to avoid. The tts
> api itself does what I want - it's the underlying framework that
> stymies me.
>
> > BTW there are very sound reasons to not make RPCs pump the event loop
> > - Windows RPC does this and it resulted in massive confusion and
> > horrible, hard to find bugs to do with unexpected re-entrancy. I can
> > elaborate in excessive detail if you want.
>
> Yes, I remember vividly the debugging session when I first discovered
> that an incoming COM call was reentering my code and stomping over my
> carefully mutex protected data. That was certainly confusing; I
> therefore agree with that design decision :)
>
> Ok, so I'm going to try to elucidate my problem as best I can:
>
> Let's say I had a fully completed application (non-trivial, lots of
> code, lots of complex interactions). One of the features of this app
> uses an event from the AlarmManager to wake up every hour, do some
> work, and play a short sound using the MediaPlayer. This code thus
> needs to be in a Service so that the BroadcastReceiver can return. One
> day I think to myself "it would be cool if the sound played by the
> service could read out the current time". So I find some aidl which
> allows me to pass in the current time, and get out a wav file. This
> should be easy...
>
> Extending my original example you get this:
>
> class MyService extends Service {
>
>  public void onStart(Intent intent, int startId) {
>    soSomethingWithIntent(intent);
>    String t = TuneChooser.getTunePath();
>    playTune(t);
>  }
> }
>
> class TuneChooser {
>
>  static public String getTune() {
>    if(normalOperation)
>      return "/sdcard/someAudioFilePath.mp3"
>
>    //**** new code here *****
>    if(fancyNewSpeakTheTimeFeature)
>      return generateAudioFromText(new Date().toString())
>  }
>
>  static public String generateAudioFromText(String text) {
>    TTS tts = new TTS(...);
>    ...
>    //wait for TTS service to start up...doh!!!
>    ...
>    tts.synthesizeToFile(text, ...);
>    return newWavFilePath;
>  }
> }
>
> So I was hoping to add a few lines of code to extend my app using a
> thirdpary service, but it seems it's not that easy. Now, I suppose I
> could re-architect the code to somehow work with this asynchronous
> requirement, but it will be probably be major surgery, and it just
> doesn't feel right. Sorry to return to the train-wreck that was COM
> again, but at least with it I could create an out-of-proc object (i.e.
> start up a com server in another process; and in fact I didn't care if
> it was in-proc, out-of-proc, or even on another machine) and make a
> method call on it, all synchronously.
>
> I understand how the service connection callback works, and have used
> it successfully in GUI code, and also in code that "eagerly" connects
> to services and then holds references for future use, but in this use
> case, it just seems unworkable.
>
> I guess I just don't understand why there was no provision for
> synchronous start-up of services.
>
> Aside: all of this is possibly moot for me if future api versions will
> have inbuilt library support for tts, but the issue at hand still
> stands.
>
> I hope you now understand where I'm coming from. I know it's difficult
> to envisage what it is going on in another programmer's head. And
> overall, I think the framework rocks!
>
> cheers,
> Craig
>
> >
>


-- 
Dianne Hackborn
Android framework engineer
hack...@android.com

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"android-framework" group.
To post to this group, send email to android-framework@googlegroups.com
To unsubscribe from this group, send email to 
android-framework+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/android-framework?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to