hier lösen wird, wenn ich nicht irre, sind Sie startSetup auf dieses Verfahren Bezug genommen, die eine final OnIabSetupFinishedListener
akzeptiert und angeblich die Abrechnung einrichtet.
Was Sie scheinen verwirrt zu sein, ist diese eher syntaktisch obskure Eigenschaft von Java genannt anonyme innere Klasse.
Lassen Sie mich versuchen, Ihre Frage zu beantworten, um es einfacher zu machen:
Ist es eine Methode, die nicht sofort ein Ergebnis zurück?
Ja, irgendwie (es gibt natürlich nichts zurück, denn es ist eine void
Methode). Es einfach gesagt, ist eine Methode, die in der Javadoc eine Instanz der Schnittstelle OnIabSetupFinishedListener
und macht einen Teil seiner Arbeit asynchron wie angegeben akzeptiert und gibt nichts zurück:
Dies wird asynchron den Setup-Prozess starten.
Somit ist dieses Verfahren ähnlich dem, was andere void
Java-Methode aussieht. Die einzige zusätzliche Implementierungsinformation ist, dass eine Art von Kommunikation zwischen dem listener
, den Sie an diese Methode übergeben, und einigen anderen Objekten eingerichtet wird.
aber, dass die Kommunikation zu einem späteren Zeitpunkt, nichtzum Zeitpunkt dieser Methode können Sie rufen, startSetup
passieren wird. Also, was wichtig ist, ist die Call-Site, also wie Sie zu Anruf diese Methode in Ihrer eigenen App gehen. Dies geschieht, hoffentlich, zum Zeitpunkt der Einrichtung Ihrer App und Sie müssen es schnell laufen lassen und daher bietet diese Methode einen Callback Mechanismus und kehrt so schnell wie möglich in einer synchronen Art und Weise ohne unnötige Verzögerung zurück.Dies bedeutet, dass Ihr aufrufender Thread Fortschritte machen kann und der Listener, den Sie an diese Methode übergeben haben, später in einem anderen Thread verwendet werden kann, wenn ein entsprechendes Ereignis eintritt.
Die Verwirrung kommt auch teilweise aufgrund der Art, wie anonyme innere Klassen typischerweise codiert werden. So Ihre Aufrufort aussehen wie die following:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
}
});
Hier bieten Sie eine anonyme Implementierung der Schnittstelle OnIabSetupFinishedListener
direkt an der Aufrufstelle (ohne tatsächlich eine eigene Klasse zu schaffen, dass die Schnittstelle implementiert, mit dem konstruieren wie class MyListener implements OnIabSetupFinishedListener
).
Es bedeutet im Grunde, dass die Methode in einem separaten Thread ausgeführt wird und den Thread nicht blockiert, der startSetup aufgerufen hat. Es ist asynchron, da weder eine Abhängigkeit noch die Möglichkeit besteht, genau zu steuern, wann es ausgeführt wird. – nasukkin