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 <natlinn...@gmail.com> 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 <andjar...@gmail.com> 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 <natlinn...@gmail.com> 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 android-developers@googlegroups.com
> > > To unsubscribe from this group, send email to
> > > android-developers+unsubscr...@googlegroups.com<android-developers%2Bunsubs
> > >  cr...@googlegroups.com>
> > > 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 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