1

我的软件在一段时间内运行良好,但在 Android 4 中出现了一些新问题。

(设备 Samsung Note 与 Android 4.0.4)

以下在其 on 线程中/上的某个循环内运行

try {
    socket.connect();     // <-- this blocks for up to 6 sec

} catch (IOException e) { // <-- this was entered
    try {
        socket.close();   // <-- here the NPE happened
    } catch (IOException ioe) {
        //stuff
    }

} catch (NullPointerException npe) {
    //stuff
}

我体验到套接字在连接阻塞时可能变为空,但最近我什至在 IOEx 捕获块内发现它为空。所以连接抛出了一个 IOEx 而不是一个 NPE,所以套接字仍然在那里。在 catch 块内,socket.close() 然后抛出一个 NPE 使服务崩溃,因为我没有在那里使用 NPE catch。

恕我直言,将 NPE catch 块放在另一个需要对象首先处于活动状态的 catch 块中是没有意义的。

这一切在 android 4 中越来越多地发生,而且大多数时候服务(和应用程序)在后台运行了一段时间。它不是一个市场应用程序,所以如果它在按下主页按钮后仍然处于活动状态就可以了。但是一旦它在后台太久,(未连接的!)套接字似乎正在被gc'ed。

问题是:为什么会这样?除了内部 IOEx 之外,我真的应该放一个 NPE 吗?

4

1 回答 1

1

我也注意到蓝牙上的 Android ICS 存在问题。正如他们声称的那样,Android ICS 为蓝牙引入了一些安全错误修复(甚至更多错误)。

所以,我会在 Android bugtracker上报告它。它可能与检查其他设备有关,看看它是三星的蓝牙堆栈还是 Android 代码。

检查我在 Android Bugtracker 上报告的问题也可能与此相关,尽管我在配对时遇到了问题。

于 2012-11-22T11:00:58.310 回答