2016-06-09 12 views
0

Ich habe ein Problem bezüglich der Anzeige von & folgenden Methodenaufrufen im Android-Quellcode, wenn Pakete beteiligt werden.Wie kann ich Methoden überprüfen, die mit Parcel.transact aufgerufen werden

Ich wollte mehr über die innere Funktionsweise von PendingIntents durch Auschecken der Android-Quellcode herausfinden, aber gerade wenn die Dinge interessant werden, Parcels pop up ein paar mehrdeutige Funktionen aufgerufen werden, und das wichtige Bit ist vorbei.

ich speziell die folgenden Zeilen in dem Sende belive() -Methode von IIntentSender ist wichtig:

mRemote.transact(Stub.TRANSACTION_send, _data, _reply, 0); 

Dies ist, wo ich verloren gehen. Wie kann ich die Methode aufspüren, die als nächstes aufgerufen wird? Der Versuch, die Quelle der Transaktionsmethode anzuzeigen, zeigt nur eine Schnittstelle ohne Code!
Der Typ von mRemote ist android.os.IBinder (eine Schnittstelle wieder)

Vielen Dank für Ihre Hilfe im Voraus!

(P.S: I verwendet grepcode.com den Quellcode zu inspizieren)

+0

Sie müssen den Code von was auch immer ist am anderen Ende der Binder-Transaktion in bestimmten Frage finden - der Code nur die Umsetzung der Transaktion selbst (die letztlich nativ ist, dh C++) wird nicht sehr interessant sein, wie es ist nur eine Leitung zwischen den Komponenten. –

Antwort

0

Das Bindemittel ist nur die „Innereien“ eines Inter-Prozess-Funktionsaufruf. Provider, Intents und Messages sind eigentlich nur Abstraktionen des Binder-Protokolls. Es gibt viele Informationen über das Binder-Protokoll, aber es ist so konzipiert, dass die meisten Menschen sich nicht darum kümmern müssen.

Wenn Sie Funktionen wie getActivity() aufrufen, erwerben Sie ein Intent-Objekt, das später verwendet wird, aber wenn diese Zeit kommt, verwendet es den Binder, um seine Aufgabe zu erledigen.

Das ist alles zu sagen, Sie sind zu weit in die "Eingeweide" gegangen und müssen einen Schritt zurücktreten. Die Binder wird buchstäblich überall verwendet und ist nur eine generische Art zu kommunizieren. Was immer auf der anderen Seite dieses Aufrufs ist, hängt davon ab, auf welche Weise die Sammelmappe (oder in diesem Fall die PendingIntent) erworben wurde.

Versuchen Sie abzuleiten, welche Komponente eine Absicht Ihrer bestimmten Sorte behandeln würde, und suchen Sie in ihrem Code nach einer .transact-Methode. Dies wird normalerweise die Form einer großen switch-Anweisung annehmen, die verschiedene Funktionen basierend auf dem ersten Argument von aufruft. Was auch immer der Fallblock ist, wird für Sie "interessant" sein.

In Ihrem Fall TRANSACTION_send lässt mich denken, etwas Aktivität mit der Fähigkeit zu finden, etwas "zu senden". Nun, das klingt nach einem Job für die ActivityManager. Dieser Code kann here gefunden werden. Überprüfen Sie die Methode onTransact für einige potenzielle Haltepunktpositionen.

+0

Vielen Dank. Ich habe tatsächlich in der ActivityManager-Klasse gefunden, wonach ich gesucht habe. Ich würde deine Antwort auffrischen, wenn ich genug Ansehen hätte –

Verwandte Themen