【问题标题】:Which exception should I throw when Android service has not been bound?Android服务未绑定时应该抛出哪个异常?
【发布时间】:2014-06-09 17:14:32
【问题描述】:

对于以下问题的琐碎性质,我深表歉意,但在 Google 搜索几分钟后我找不到答案。

我有一个 Java 对象,它充当开发人员 SDK 的前端。此对象称为DataCollectionManager。与大多数(如果不是全部)Android 管理器对象(CameraManager、LocationManager 等)一样,DataCollectionManager 管理与设备上运行的服务的连接。

当使用 SDK 的客户端创建 DataCollectionManager 对象时,构造函数将绑定到设备上运行的 DataCollectionService。客户端向构造函数提供一个侦听器接口,该接口将在服务连接建立时被回调。一旦通知了此侦听器,客户端就知道可以在 DataCollectionManager 上进行 API 调用。

但是,客户端可能会在建立服务连接之前尝试进行 API 调用。在这种情况下,我在每个方法的顶部都有一个如下所示的代码块:

if (!mServiceBound) {
   // do something
}

如果服务未绑定,我想抛出异常,但我不确定是哪一个。

我应该抛出哪个异常?我想抛出一个检查异常,这样客户端代码就不会崩溃。是否存在适合这种情况的预先存在的异常,还是我应该定义自己的异常?

【问题讨论】:

  • 如果你不希望它被检查,我建议IllegalStateException,但在这种情况下,定义你自己的声音最好,因为它是你自己设计的一类。它迫使开发人员思考他们的代码。
  • @DaveMorrissey 嗯,你可能是对的。在这种情况下,如果客户端代码在收到服务连接回调之前调用这些 API,则从技术上讲是不正确的。我想我会使用 IllegalStateException。我刚刚查看了相关文档,看起来它是专门用于此类目的的。如果您想将您的评论表述为下面的答案,我很乐意给它打勾。

标签: java android exception exception-handling


【解决方案1】:

我不知道您正在寻找这样的异常,所以我建议您创建自己的异常。

如果你很懒,你可以抛出一个“异常”并在其中输入一些文本(例如throw new Exception("Service not bound!");)。显然我不建议这样做,但如果你不想花太多时间在某件事上,那么它应该适用于割草。

要了解如何创建自己的异常,建议您查看How to create custom exceptions in Java?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多