如何在Android中停止线程?

如何在Android中停止线程?,android,multithreading,android-runonuithread,Android,Multithreading,Android Runonuithread,我的回调函数中有一个线程,如下所示: @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 ha

我的回调函数中有一个线程,如下所示:

@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
 }

我主要是以这种方式使用线程。在活动中查看它的独立性

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);

}
}

谢谢,希望这能帮助你

我主要是用这种方式使用线程。在活动中查看它的独立性

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);

}
}
谢谢,希望这能帮助你

请像这样做

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);
    }
});
}

在onDestroy()中也是如此

请像这样做

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);
    }
});
}



在onDestroy()中也是如此

是否要停止处理程序?您的
Runnable
仅运行一次。因为蓝牙连接丢失时会自动调用
onconnectorr
。所以,我每2秒钟就看一次日志。我怎样才能阻止它。它可能来自Handler@user8264好的,我正在添加带有一些更改的答案。是否要停止处理程序?您的
Runnable
仅运行一次。因为蓝牙连接丢失时会自动调用
onconnectorr
。所以,我每2秒钟就看一次日志。我怎样才能阻止它。它可能来自Handler@user8264好的,我正在添加我的答案,但做了一些更改。holdConnectionHandler是
onononconnectError
中的一个局部变量。我如何在我的o
ndestory
函数中调用它?它不是本地函数,您可以像任何方法一样使用它,尝试一次,如果您卡在任何地方,请告诉我。您能在onConnectError中看到我的主函数并在该函数中使用for方法吗?我会测试它你想做什么取决于你的变量蓝牙设备,信息?请检查我已经更新了我的答案。它是如何在活动中工作的。处理程序独立工作。holdConnectionHandler是
onononconnectError
中的局部变量。我如何在我的o
ndestory
函数中调用它?它不是本地函数,您可以像任何方法一样使用它,尝试一次,如果您卡在任何地方,请告诉我。您能在onConnectError中看到我的主函数并在该函数中使用for方法吗?我会测试它你想做什么取决于你的变量蓝牙设备,信息?请检查我已经更新了我的答案。它是如何在活动中工作的。独立工作。