Ceci est mon code:lient service à une activité
public class MainActivity extends Activity {
private ComponentName mService;
private Servicio serviceBinder;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
serviceBinder = ((Servicio.MyBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
serviceBinder = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent bindIntent = new Intent(this, Servicio.class);
bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStart() {
serviceBinder.somethingThatTakesTooMuch();
super.onStart();
}
public class Servicio extends Service {
private final IBinder binder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public int somethingThatTakesTooMuch() {
return 1;
}
public class MyBinder extends Binder {
Servicio getService() {
return Servicio.this;
}
}
Quand je lance, Obtenir un NullPointerException dans cette ligne:
serviceBinder.somethingThatTakesTooMuch();
synic: Oh, comment voulez-vous que je devrais gérer que je ne peux pas montrer mon activité jusqu'à ce que je la connexion? – Macarse
Bonne question. Je ne sais pas. Vous pourriez probablement minimiser le temps qu'il faut en le créant au préalable (éventuellement dans une autre activité) – synic
La connexion devrait être très rapide, mais elle n'est ni immédiate ni bloquante. Par conséquent, je ne m'inquiéterais pas de l'heure - il suffit d'écrire votre code qui a besoin du service pour qu'il soit déclenché par 'onServiceConnected()'. – CommonsWare