Я ищу способ вручную предварительно перехватить все исключения RuntimeExceptions из Binder. Я использую BoundService, и я хотел бы перехватить эти RuntimeExceptions, а не просто позволить им регистрироваться стандартным способом:
В реализации android class Binder. java вы видите стандартный способ обработка этих исключений:
// Entry point from android_util_Binder.cpp's onTransact
private boolean execTransact(int code, long dataObj, long replyObj,
int flags) {
BinderCallsStats binderCallsStats = BinderCallsStats.getInstance();
BinderCallsStats.CallSession callSession = binderCallsStats.callStarted(this, code);
Parcel data = Parcel.obtain(dataObj);
Parcel reply = Parcel.obtain(replyObj);
// theoretically, we should call transact, which will call onTransact,
// but all that does is rewind it, and we just got these from an IPC,
// so we'll just call it directly.
boolean res;
// Log any exceptions as warnings, don't silently suppress them.
// If the call was FLAG_ONEWAY then these exceptions disappear into the ether.
final boolean tracingEnabled = Binder.isTracingEnabled();
try {
if (tracingEnabled) {
Trace.traceBegin(Trace.TRACE_TAG_ALWAYS, getClass().getName() + ":" + code);
}
res = onTransact(code, data, reply, flags);
} catch (RemoteException|RuntimeException e) {
if (LOG_RUNTIME_EXCEPTION) {
Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e);
}
в случае исключения времени выполнения оно просто регистрируется Log.w (TAG, Caught a RuntimeException из реализации заглушки связующего.)
В моем случае я хотел бы переслать эту информацию в другой фреймворк ведения журнала, который я использую. Есть ли какая-то возможность перехвата или перехвата для получения информации, если это произойдет?
Спасибо