2012-11-22 50 views
1

我的軟件在一段時間內工作正常,但隨着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捕獲?

回答

1

我也注意到藍牙上的Android ICS問題。 Android ICS向藍牙引入了一些安全漏洞修補程序,因爲它們聲稱(甚至更多漏洞)。

所以,我會在Android bugtracker上報告。這可能與檢查其他設備有關,以查看它是三星的藍牙堆棧還是Android代碼。

這也可能與檢查我在Android Bug Tracker上報告的issue,雖然我有配對問題。