Android OS 용 서비스 및 활동을 작성했습니다.Android 원격 예외 및 서비스
내 서비스는 자체 프로세스로 실행되므로 내 활동과 서비스 간의 모든 통신은 IPC를 통해 이루어집니다. 나는 이것을 위해 표준 Android .aidl 메커니즘을 사용한다.
지금까지 모든 것이 잘 작동합니다. 그러나 AIDL은 "throws RemoteException"을 사용하여 모든 메소드 스텁을 생성하므로 처리해야합니다.
전체 안드로이드 소스 코드에서 빠른 grep을했고,이 예외가 던져지는 세 가지 경우 만 발견했습니다. 이것들은 내가 연결하지 않는 다른 서비스에 있습니다.
이론적으로 JNI 인터페이스를 사용하여 RemoteExceptions을 생성 할 수 있기 때문에 C 소스도 확인했습니다. 아무 것도 나타나지 않았습니다.
나는 모든 사람들이 그냥이처럼 그들을 처리하는 인상이 있습니다
이try {
mService.someMethodCall (someArguments);
} catch (RemoteException e) {
e.printStackTrace();
}
이 고체 코드가 아닙니다, 그리고 내 코드베이스에서이 같은 것을 원하지 않는다.
그 외 : IPC 자신을 통해 RemoteException을 던지려고했는데 예외가 아직 지원되지 않는다고 말하는 스택 추적 및 시스템 로그 메시지가있었습니다. 내 응용 프로그램은 예외
:-((중간 작업) 아주 이상한 상태로 결국 예외를 던진 서비스 질문은 본 적이 :
이 예외가 이제까지 던져 수행을
이 (가) "는 RemoteException을 던졌습니다"때문에 우리가 그들과 거래를 강요하는 것을
- 는 그들이 존재하지 않는 것이 될 수 있을까요? 누구도 그런 시도-catch 블록은 RemoteException을 잡기 본 사람과 AIDL 컴파일러에서 코드가 죽었거나 왼쪽에 있습니까?
Disclamer : 전체 소스 코드를 읽지 않았습니다. Grep를 사용하여 RemoteException이 발생 했으므로 다른 공백 사용으로 인해 일부를 놓친 것일 수 있습니다.
안녕하세요. 멋진 답변입니다. 내 서비스가 다른 프로세스에서 실행 중이었고 스트레스 테스트 중에 DeadObjectExceptions이 여기 저기에서 보였습니다. 항상 바인드 된 응용 프로그램이 실행되는 동안 쉘을 사용하여 서비스 프로세스를 중단했습니다. DeadObjectException은 항상 todo-list에있었습니다. 이제는 RemoteException의 서브 클래스에 불과하다는 것을 알았으니 어떻게해야할지 알았습니다. 고맙습니다. 누군가가 더 통찰력이있는 경우에 대비하여 다른 날을 위해 질문을 공개합니다! 건배, Nils –
@Nils Pipenbrinck Glad 도와 줄 수 있습니다. 또한, 당신이 나의 대답을 받아 들였기 때문에 현상금을 수여 할 수 있을까요? –
나는 당신이 당신에게 그것을 수여해야한다는 것을 몰랐습니다. 나는 그것이 대답에 묶여 있다고 생각 : ..-) –