扔一个自定义的异常服务活动
题
我目前的工作上。应用程序'和我思考的最佳方式的不同类型的例外于一个异常,我的活动自我服务。
因为它似乎不可能扔的另一件事比一个异常使用IPC(你不能宣布扔任何东西在你的.aidl),我只是看见两个方案:
创建一个监听我的活动,以听我的定义。例外,这实际上不会被扔但只是作为一个通常的对象实施的Parcelable协议。
抓住我的XMPPException并把一个异常(与内容更新我的XMPPException)-但在这种情况下,我怎么会知道关于我的活动,如果它是一个。或者一个真正的异常?通过标记的名称,例外和解析我的的活动?这将是真的血腥。
你有任何想法?我错过什么从SDK文档?
谢谢。
其他提示
看起来我们可以扔定的例外情况源自异常.所以你可以有XMPPRemoteException,或者只是一个通用的MyRemoteException,将保持原来的例外。下面是一个演示的第二种情况:
服务器:
try {
...
}
catch(XMPPException e) {
throw new MyRemoteException(e);
}
客户:
try {
service.someCall();
}
catch(MyRemoteException e) {
rethrow(e);
}
辅助方法:
private void rethrow(MyRemoteException e) throws Exception {
if(e.innerException instanceof XMPPException)
throw (XMPPException)e.innerException;
else
throw e.innerException;
}
例外:
public class MyRemoteException extends RemoteException {
private static final long serialVersionUID = 1L;
public Exception innerException;
public MyRemoteException() {}
public MyRemoteException(Exception innerException) {
this.innerException = innerException;
}
}
我认为这是不可能实现的"抛出一个自定义的异常服务活动"。看到资源的包裹:
/**
* Use this function for customized exception handling.
* customized method call this method for all unknown case
* @param code exception code
* @param msg exception message
*/
public final void readException(int code, String msg) {
switch (code) {
case EX_SECURITY:
throw new SecurityException(msg);
case EX_BAD_PARCELABLE:
throw new BadParcelableException(msg);
case EX_ILLEGAL_ARGUMENT:
throw new IllegalArgumentException(msg);
case EX_NULL_POINTER:
throw new NullPointerException(msg);
case EX_ILLEGAL_STATE:
throw new IllegalStateException(msg);
}
throw new RuntimeException("Unknown exception code: " + code
+ " msg " + msg);
}
因此,我们可以知道,我们就可以把这五个例外情况上。
例如:如果你的服务扔IllegalArgumentException:
@Override
public void addImage(final int align, final byte[] imageData) throws RemoteException {
log("/// addImage ///");
if (imageData == null) {
throw new IllegalArgumentException("The second argument(image data) can not be empty!");
}
...
}
你的客户会可以抓住它:
try {
printer.addImage(0, null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
不隶属于 StackOverflow