R Ravichandran wrote:
> This is definitely a viable approach for my application architecture,
> but still strugglng to make this work. Here are some details, and I am
> hoping that someone will point out what is going wrong here.
>
> 1. I have a class "MyServiceInitiator" that is hooked up to the
> BOOT_COMPLETED action.
>
>
> public class MyServiceInitiator extends BroadcastReceiver {
>
> private ServiceConnection mConnection = new ServiceConnection() {
> public void onServiceConnected(ComponentName className, IBinder
> service) {
> }
>
> public void onServiceDisconnected(ComponentName className) {
> }
> };
You cannot call bindService() from a BroadcastReceiver. You can call
startService() from a BroadcastReceiver, as you doing below. Hence you
do not need a ServiceConnection object, since that is only used with
bindService().
> public class MyService extends Service implements Runnable {
>
>
> @Override
> public void onCreate() {
> System.out.println ("MyService:
> onCreate()================================================");
> }
You need to chain to super.onCreate(). Also, please consider using
android.util.Log instead of System.out.
>
> @Override
> public IBinder onBind(Intent arg0) {
> // TODO Auto-generated method stub
> System.out.println ("MyService:
> onBind()================================================");
> doScan();
> return null;
> }
This will never be called, since you are not using bindService().
> @Override
> public boolean onUnbind(Intent intent) {
> System.out.println
> ("onUnbind()================================================");
> return super.onUnbind(intent);
> }
>
> public class LocalBinder extends Binder {
> MyService getService() {
> return MyService.this;
> }
> }
>
>
> @Override
> public void onRebind(Intent intent) {
> super.onRebind(intent);
> }
Those will never be used, since you are not calling bindService().
> @Override
> public void run() {
> try {
> System.out.println ("MyService(): inside the run method....");
> Thread.currentThread().sleep(1000);
> }
> catch(InterruptedException iex) {
> iex.printStackTrace();
> }
>
> }
This will never be used, as you are not starting a thread.
> I need to use a thread to do some background process that does not seem
> to run at all. The android documentation stays clearly that we should
> spawn our own threads if we need to perform long standing operations.
That is true. You are not spawning a thread.
> I also see this log cat out that clearly shows that the process
> corresponding to the service crashed:
>
> D/ActivityManager( 584): Force removing process ProcessRecord{43701018
> 703:com.bn/10020 <http://com.bn/10020>} (com.bn/10020 <http://com.bn/10020>)
> W/ActivityManager( 584): Scheduling restart of crashed service
> com.mypackage/.MyService in 5000ms
> I/Process ( 584): Sending signal. PID: 703 SIG: 9
This is not an exception. Look in your logcat output for a Java stack
trace to see where the exception is.
--
Mark Murphy (a Commons Guy)
http://commonsware.com | http://twitter.com/commonsguy
Looking for Android opportunities? http://wiki.andmob.org/hado
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---