- 你爲什麼使用反射createRFCommSocket? device.getClass()。getMethod(「createRfcommSocket」,new Class [] {int.class});
而非
try {mBTSocket = mBTDevice.createRfcommSocketToServiceRecord(UUID_RFCOMM_GENERIC);
} catch (Exception e1) {
msg ("connect(): Failed to bind to RFCOMM by UUID. msg=" + e1.getMessage());
return false;
}
反射可以很容易地的問題的來源。如果沒有理由使用它,那麼不惜一切代價避免它。另外,如果getClass調用失敗,那麼你的「m」變量將爲null,並且你不會陷入這種情況。您應該更加概括您的異常,而不是使用特定的異常,只需使用「異常」就像在上面的代碼片段中一樣。對於可能拋出的每種可能類型的異常來說,添加catch都要容易得多。
我對你在處理程序中做什麼感到困惑,它對我沒有意義。你可以刪除處理程序代碼來簡化事情嗎?
只有太多的併發症。刪除所有的反射,額外的捕獲。
這是很好的編碼實踐,使您的方法一頁或更少。當一個方法不止一頁時,它太複雜了,它使得閱讀和調試非常困難。通過創建其他方法來執行常見任務來減少方法的大小。
將您的connect()邏輯與您的I/O邏輯分開。你應該有一個發送數據的方法,一個接收數據的方法,一個connect()的方法。然後,一旦你得到那些工作,大塊和創建更高級別的I/O發送和接收整個數據塊的方法。然後完善這些方法並保持成長。
在我的代碼中,讀,寫,連接和ALL I/O方法每個只有1-20行。保持它們非常簡單,因爲你的I/O邏輯是你的應用程序的核心,它需要乾乾淨淨。
我更新我的信息如下: http://stackoverflow.com/questions/3857508/could-more-than-one-rfcomm-channels-be-created-per-time – user462358 2010-10-04 18:50:43