2016-09-15 166 views
0

我有一個線程在我的回調函數如下:如何停止Android中的線程?

@Override 
public void onConnectError(final BluetoothDevice device, String message) { 
    Log.d("TAG","Trying again in 3 sec."); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        //Do something 
       } 
      }, 2000); 
     } 
    }); 
} 

我會關閉上述線程當我按下後退按鈕或的onDestroy。我該怎麼做。謝謝

@Override 
public void onBackPressed() { 
    // Close or distroy the thread 
} 
@Override 
public void onDestroy() { 
    // Close or distroy the thread 
} 
+0

你想停止處理程序? –

+0

你的'Runnable'只運行一次。 –

+0

因爲當藍牙連接丟失時,會自動調用onConnectError。所以,我每2秒鐘就看一次日誌。我怎樣才能阻止它。它可能來自處理程序 – user8264

回答

1

請做到這一點像

private Handler handler; 
private Runnable runnable; 

@Override 
public void onConnectError(final BluetoothDevice device, String message) { 
Log.d("TAG","Trying again in 3 sec."); 
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     handler = new Handler(); 
runnable = new Runnable() { 
     @Override 
     public void run() { 
//Do something 
     } 
    }; 
handler.postDelayed(runnable, 2000); 
    } 
}); 
} 

and

@Override 
public void onBackPressed() { 
if (handler != null && runnable != null) { 
     handler.removeCallbacks(runnable); 
    } 
} 

and same in onDestroy();

1

我主要使用的線程在這個way.See其獨立的活動

public class TestActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.abc); 

    holdConnectionHandler.sendEmptyMessage(0); 

} 

Handler holdConnectionHandler = new Handler() { 

public void handleMessage(android.os.Message msg) { 
// do some work 

    holdConnectionHandler.sendEmptyMessageDelayed(0, 10 * 1000); 
} 
}; 

@Override 
public void onDestroy() { 
super.onDestroy(); 

holdConnectionHandler.removeCallbacksAndMessages(null); 
// or 
holdConnectionHandler.removeMessages(0); 

} 
} 

感謝希望這將幫助你

+0

holdConnectionHandler是'ononConnectError'中的局部變量。我怎樣才能在我的o'nDestroy'函數 – user8264

+0

中調用它不是本地的,你可以像任何方法一樣使用它,嘗試一次,讓我知道你是否卡在任何地方。 – Saveen

+0

你可以在onConnectError中看到我的主函數並用於該函數中的方法嗎?我會測試它 – user8264