vitamoe1.6 vitamoe1.6 - 1 month ago 7
Android Question

startService() from the service class itself

I try to start an android service from the service's class.
The reason to do this is to achieve some platform independence.

Doing this I get a NullPointerException at android.content.ContextWrapper.startService(ContextWrapper.java:326). The platform target is 2.1-update1, any suggestions?

See the code below (I left the imports out to save some space)

/* GUI: HelloAndroid.java */
package com.example.helloandroid;

public class HelloAndroid extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// that works!
startService(new Intent("com.example.helloandroid.UnusualService"));

// stop the service works of course, too
stopService(new Intent("com.example.helloandroid.UnusualService"));

// unusual start does not work:
UnusualService myService = new UnusualService();
myService.startService();
}
}

/* Service: UnusualService.java */
package com.example.helloandroid;

public class UnusualService extends Service {
@Override
public void onCreate() {
Toast.makeText(this, R.string.service_started, Toast.LENGTH_SHORT).show();
}

@Override
public void onDestroy() {
Toast.makeText(this, R.string.service_stopped, Toast.LENGTH_SHORT).show();
}

@Override
public IBinder onBind(Intent intent) {
return null; // make something here when the rest works
}

public void startService() {
// folowing line will cause the NullPointerException
startService(new Intent("com.example.helloandroid.UnusualService"));
}

public void stopService() {
stopSelf();
}
}

Answer

Of course - your newly created service does not have a reference to a context, so the context is null and therefore the system throws a NullPointerException. Remember: Do not create a service on your own by using new - the system does this for you!