2012-11-08 63 views
1

我有一個複製藍牙OBEX協議的類。該課程基於藍牙聊天示例。這個類的一個實例在我onCreate()方法構造onResume()的奇怪行爲 - 線程已經啓動

bluetoothCommunicator = new BluetoothCommunicator(BaseClass.this); 

BluetoothCommunicator類具有延伸螺紋

AcceptThreadReadInputThread

從我的基類,其中所述通信插座被初始化兩個內部類,我也有onResume()onPaused()方法。

@Override 
public void onResume() { 
    bluetoothCommunicator.resumeCommunicator();  
} 

這將調用resumeCommunicator方法:

public void resumeCommunicator() { 
     Log.i("RESUME COMMUNICATOR: ", "COMMUNICATOR IS RESUMED"); 
     if(server == null) 
      Log.i("Server: ", "IS NULL"); 

     if (server == null) { 
      AcceptThread server = new AcceptThread(); 
      server.start(); 
     } 

     if(!server.isAlive()) { 
      server.start(); 
     } 
    } 

在這種方法中,serverAcceptThread

實例,但這種onResume方法會造成一些問題,對我來說。當我將應用程序放在後臺並嘗試再次打開時,將調用onResume方法,但它表示線程已經啓動並引發異常。通過查看resumeCommunicator方法中的代碼,這聽起來很奇怪,會發生這種情況。

+0

您會在哪一行發生異常?你可以發佈你的'onPause()'的相關部分嗎? –

+0

線程不必因爲應用程序放在後臺而死掉。你有哪些例外?另外,這段代碼看起來並不正確:你檢查'server'是否爲null,並創建一個新線程(在該範圍內),然後調用isAlive()方法。我不知道其他代碼中發生了什麼,但這仍然可能導致NullPointerException。 – takecare

回答

2

您的帖子最有可能死亡。已死的線程沒有活動,無法重新啓動。在一個活動中有一個用於藍牙通信的線程似乎很奇怪。您應該將其放入服務中。