我的軟件在一段時間內工作正常,但隨着Android 4的出現,一些新問題也隨之出現。當進入IOEx catch catch時,藍牙插槽變爲空(android 4)
在/某些循環內的以下運行在其上的螺紋
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
}
我做了經驗
(與Android 4.0.4設備三星注),儘管上阻塞插座可以把空連接,但最近我甚至發現它在IOEx catch塊內爲空。所以連接丟了IOEx而不是NPE,所以socket仍然在那裏。 catch塊內的socket.close()然後拋出一個NPE崩潰的服務,因爲我沒有使用NPE捕獲那裏。
Imho它只是沒有任何意義,把一個NPE捕獲塊放在另一個捕獲塊,要求該對象在第一個地方活着。
這一切都發生越來越多與Android 4和大部分時間的服務(和應用程序)在後臺運行一段時間。它不是一個市場應用程序,所以它確定如果它在點擊主頁按鈕後仍然有效。但是一旦它在後臺運行時間過長,看起來(未連接的)套接字就會被刷新。
問題是:爲什麼會發生這種情況?除了內部IOEx之外,我是否應該真的把NPE捕獲?