Code de liaison de service local de l'activité au service
-
29-10-2019 - |
Question
Le code client pour la liaison à un service, qui se trouve normalement dans la classe d'activité; J'essaie de le déplacer vers la classe de service, afin que la classe d'activité soit aussi propre et petite que possible.
c'est-à-dire essayer essentiellement de fusionner le code dans la deuxième boîte ici dans la première boîte = autant de celle-ci dans la classe de service que possible
Une seule ligne d'activité pour se lier au service
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Bind to service with this line only:
AService.bindService(this);
}
}
STATIC BINSERVICE ET SERVICECONNECTION EN SERVICE AU SERVICE
public class AService extends Service {
public String test = "I want to see this";
public static AService aService;
private static boolean isBound;
private static Context context;
// ... IBinder, onBind etc also here on service side
public static void bindService(Context context) {
try {
Log.i(TAG, "bindService Start");
if (!isBound && context != null) {
Log.i(TAG, "Binding");
context.bindService(new Intent(context, AService.class),
serviceConnection, Context.BIND_AUTO_CREATE);
isBound = true;
Log.i(TAG, "Bound");
}
} catch (Exception e) {
Log.e(TAG, "bindService", e);
}
}
private static ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
try {
Log.i(TAG, "onServiceConnected Start");
aService = ((AService.LocalBinder) service).getService();
if (aService != null)
Log.i(TAG, aService.test);
Log.i(TAG, "onServiceConnected Finish");
} catch (Exception e) {
Log.e(TAG, "onServiceConnected", e);
}
}
public void onServiceDisconnected(ComponentName className) {
try {
Log.i(TAG, "onServiceDisconnected");
aService = null;
} catch (Exception e) {
Log.e(TAG, "onServiceDisconnected", e);
}
}
};
public static void unbind() {
try {
Log.i(TAG, "unbind start");
if (isBound && context != null) {
Log.i(TAG, "Unbinding");
context.unbindService(serviceConnection);
isBound = false;
context = null;
Log.i(TAG, "Unbound");
}
} catch (Exception e) {
Log.e(TAG, "unbind", e);
}
}
}
Mais onserviceConnected n'est jamais appelé?
Le journal montre tout jusqu'à:
...
Bound
- Mais Pas le début de la connexion ou au-delà
- et aucune exception.
- Notez que lorsque le même code était dans l'activité, cela fonctionne (lorsqu'il est appelé avec MyActivity.Ce)
Qu'est-ce que je fais mal?
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow