Thanks so much for the response.  But if the long loop (which updates
the field that needs to find its way to the activity) is in a
different thread from the one that processes the showMessage call,
won't I have to switch to doing the communication through the
Handler?  And at that point I'm beginning to wonder if it makes sense
to bother with the service or if I should just be doing the work on
different threads and communicating through the Handlers?  Or am I
missing something?  Maybe the example you posted will clear all this
up though, I'll look at that now.  :)

On Jan 20, 3:24 pm, jotobjects <[email protected]> wrote:
> Hi Natalie -
>
> Not sure what you mean by service you "spawned onto its own thread".
>
> In any case, it looks like the Service is going to be pretty busy in
> that while(1) loop so it is not too surprising that it is not
> available to process the showMessage call.  :)  Yes they are two
> different threads.  The Activity is blocking on the call to the
> service that is forever busy in the for loop.
>
> I think you need to put that loop in a thread and then you need a
> different Runnable for the handler post().  Here is an example -
>
> http://developer.android.com/resources/faq/commontasks.html#threading
>
> Also the serviceHandler.post(myProcess) in onCreate is a duplicate.
> This is where you need something like startLongWhileLoop() that
> creates a thread instead.
>
> On Jan 20, 2:49 pm, Natalie <[email protected]> wrote:
>
>
>
> > Thanks for the response.
> > I'm pretty sure that's not it because I've put a debug statement first
> > off in the broadcast receiver's onReceive method and that isn't
> > appearing either.  It almost seems that the activity's thread just
> > isn't getting switched to - so far I've only tested in the emulator,
> > could the emulator not be switching back to the activity's thread?
> > I've posted the seemingly relevant chunks of code below if that helps.
>
> > ACTIVITY ...
> > public class AudioProcessor extends Activity {
> >         private AudioInterface service;
> >         private ServiceConnection svcConn = new ServiceConnection(){
> >                 public void onServiceConnected(ComponentName className, 
> > IBinder
> > binder){
> >                         service = AudioInterface.Stub.asInterface(binder);
> >                 }
> >                 public void onServiceDisconnected(ComponentName className){
> >                         service = null;//NL = probably do more in onService 
> > methods
> >                 }
> >         };
> >         private BroadcastReceiver receiver = new BroadcastReceiver(){
> >                 public void onReceive(Context context, Intent intent){
> >                         Log.d("SHOWING!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!");
> >                         showMessage(context, intent);
> >                 }
> >         };
> >         @Override
> >         public void onCreate(Bundle savedInstanceState) {
> >                 super.onCreate(savedInstanceState);
> >         setContentView(R.layout.main);
> >                 Intent serviceIntent = new Intent(this, AudioService.class);
> >                 bindService(serviceIntent, svcConn, BIND_AUTO_CREATE);
> >                 registerReceiver(receiver, new IntentFilter
> > (AudioService.BROADCAST_ACTION));
> >                 serviceIntent.setAction
> > ("com.linnell.audioprocessor.AudioService");
> >                 startService(serviceIntent);*/
> >         }
> >         public void showMessage(Context context, Intent intent){
> >                 Log.d("SHOWING!!!!!!!!!!!", "!!!!!!!!!!!!!!!!!!!");
> >                 try{
> >                         String message = service.showMessage();
> >                         new AlertDialog.Builder(this).setTitle("Suggestion")
> >                         .setMessage(message)
> >                         .setNeutralButton("Close", new 
> > DialogInterface.OnClickListener(){
> >                                 public void onClick(DialogInterface dlg, 
> > int sumthin){
> >                                         //do nothing - it will close on its 
> > own
> >                                 }
> >                         })
> >                         .show();
> >                 }
> >                 catch(final Throwable t){
> >                         Log.e("ERROR", "ERROR IN CODE");
> >                         svcConn.onServiceDisconnected(null);
> >                 }}}
>
> > SERVICE ...
> >         public static final String BROADCAST_ACTION = "new_message";
> >         private Intent broadcast = new Intent(BROADCAST_ACTION);
> >         private Handler serviceHandler;
> >         private Process myProcess;
> >         public IBinder onBind(Intent intent) {
> >                 return mBinder;
> >         }
>
> >         @Override public void onCreate() {
> >                 super.onCreate();
> >                 myProcess = new Process();
> >                 serviceHandler = new Handler();
> >                 serviceHandler.post(myProcess);
> >         }
> >         @Override public void onDestroy() {
> >                 super.onDestroy();
> >                 shutdownService();
> >         }
> >         private final AudioInterface.Stub mBinder = new 
> > AudioInterface.Stub()
> > {
> >                 public String showMessage(){
> >                         serviceHandler.post(myProcess);
> >                         return message;
> >                 }
> >                 public void stopService(){}
>
> >         };
> >         class Process implements Runnable{
> >                 public void run(){
> > //run then sits on a while(1), occasionally doing a sendBroadcast
> > (broadcast);
>
> > I know a lot of the stuff in onCreate would be better in onResume, etc
> > - I'm planning on cleaning all this up once the functionality is
> > there.  :)
>
> > On Jan 20, 2:21 pm, Kevin Duffey <[email protected]> wrote:
>
> > > I am not entirely sure if I understand.. but is it possible when you raise
> > > the alert dialog, it's a different activity and that may be why it seems
> > > it's not working? Maybe you have to do something in the alert dialog... or
> > > maybe it blocks the main activity thread and that is why?
>
> > > On Wed, Jan 20, 2010 at 2:10 PM, Natalie <[email protected]> wrote:
> > > > Hi everyone,
> > > > I'm hoping to do some audio processing in a remote service (service
> > > > I've spawned onto its own thread); this will basically occur in a while
> > > > (1) loop - so constant processing.  Occasionally I want to provide
> > > > some information back to the activity that is bound to the service;
> > > > I'm doing this by sending a broadcast from the service, that is
> > > > received by a broadcast receiver on the activity, which then uses the
> > > > activity's service connection to call into the service and get the
> > > > information needed; at this point the broadcast receiver makes an
> > > > alert dialog presenting the information to the user.
> > > > If I stay in my while(1) loop after raising the broadcast, the action
> > > > in the broadcast receiver never seems to occur.  This is confusing to
> > > > me since the activity and service are in separate threads.  If I end
> > > > the loop after raising the broadcast, the desired behavior on the
> > > > activity side occurs, but of course this isn't acceptable since I need
> > > > to be doing constant processing.  Anyone have any suggestions of what
> > > > the probelm might be?
> > > > Thanks!
> > > > Natalie
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > > > Groups "Android Developers" group.
> > > > To post to this group, send email to [email protected]
> > > > To unsubscribe from this group, send email to
> > > > [email protected]<android-developers%2Bunsubs
> > > >  [email protected]>
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/android-developers?hl=en
-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to