You are getting ANR because the service is in an infinite loop! Putting it in a remote service doesn't fix that.
On Jan 20, 3:41 pm, Natalie <[email protected]> wrote: > 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

