Wie testen Sie meine IBinder
Objekt, dass Service
zurück auf onBind
?Android Service Testing
Antwort
Dies entspricht der Remote-Schnittstelle, die Sie zwischen Ihrem Kontext und dem Dienst verwenden (im Remote-Aufruf-Szenario). Zum Beispiel können Sie wie folgt tun:
IBinder service = this.bindService(new Intent(TestService.class.getName()));
assertNotNull(service);
assertTrue(service instanceof ITestServiceCall); //see if the service returns the correct interface
ITestServiceCall iTestServiceCall = ITestServiceCall.Stub.asInterface(service);
assertNotNull(iTestServiceCall);
iTestServiceCall.doSomething();
Die ITestServiceCall ist die Schnittstelle, die Sie in einer AIDL Datei definieren (ITestServiceCall.aidl).
Aber bevor dies funktioniert, müssen Sie sicherstellen, dass Ihr Dienst den Stub Ihrer Schnittstelle korrekt auf onBind() zurückgibt.
Ich hoffe, das kann helfen.
Es ist eine schlechte Idee, den Binder direkt nach dem Aufruf von bindService zu testen. Diese Methode ist asynchron und gibt nichts Interessantes zurück, bevor die onServiceConnected-Funktion von ServiceConnection – Snicolas
aufgerufen wird. In ServiceTestCase wird kein 'ServiceConnection.onServiceConnected()' verwendet, deshalb erhalten wir das IBinder-Objekt direkt nach dem 'bindService()'. Das ist anders als der tatsächliche Service-Fluss, denke ich. –
Akzeptieren Sie die Antwort seit mehr als 3 Jahren! – JPM