Also, you should consider having the client supply a callback interface instead of using a broadcast to communicate with it. The RemoteService includes this as part of its example. (And just to be sure -- do you -really- need a remote service? If there is no need for it to run in a separate process from the client, then making it a local service greatly simplifies your interaction with it.)
On Wed, Jan 20, 2010 at 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%[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]<android-developers%[email protected]> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- Dianne Hackborn Android framework engineer [email protected] 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 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

