Hi Dianne,
I initially had the service as a local service, but my application was
getting Application Not Responding messages.  Since I'll never have
more than one application binding to my service, I think I'm just
going to abandon the service approach and try the approach in the
example jotobjects posted - I can't see any reason that having it as a
service is useful, but am I missing something?
Thanks!!


On Jan 20, 3:32 pm, Natalie <[email protected]> wrote:
> 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