为了账号安全,请及时绑定邮箱和手机立即绑定

如何在我的父类中强制关闭线程

如何在我的父类中强制关闭线程

大话西游666 2022-07-27 20:48:28
我有一个来自父类的活动继承。现在,当我离开我的 clild 活动时,我需要关闭父线程。我不知道该怎么做。这是我的基类。public abstract class SerialPortActivity extends Activity { public class ReadThread extends Thread {    @Override    public void run() {        super.run();        while(!isInterrupted()) {            int size;            try {                if (mInputStream == null) return;                size = mInputStream.read(buffer);                if (size > 0) {                    onDataReceived(buffer, size);                }            } catch (IOException e) {                e.printStackTrace();                return;            }        }    }}@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    mApplication = (Application) getApplication();    try {        mSerialPort = mApplication.getSerialPort();        mOutputStream = mSerialPort.getOutputStream();        mInputStream = mSerialPort.getInputStream();        /* Create a receiving thread */        mReadThread = new ReadThread();        mReadThread.start();    } catch (SecurityException e) {        DisplayError(R.string.error_security);    } catch (IOException e) {        DisplayError(R.string.error_unknown);    } catch (InvalidParameterException e) {        DisplayError(R.string.error_configuration);    }}protected abstract void onDataReceived(final byte[] buffer, final int size);@Overrideprotected void onDestroy() {    if (mReadThread != null)        mReadThread.interrupt();    mApplication.closeSerialPort();    mSerialPort = null;    super.onDestroy(); }}这是我的子类。public class ConsoleActivity extends SerialPortActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.console);}我想在离开 ConsoleActivity 时关闭 mReadThread。当我重新启动 ConsoleActivity 时,mReadThread 将一起重新启动。我能怎么做?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

在SerialPortActivity类中添加ReadThread这样的引用:


public ReadThread mReadThread;

然后在子类中,您可以访问mReadThread和处理生命周期,您必须覆盖onStartandonStop方法。像这样:


@Override

public void onStart() {

    super.onStart();

    if (mReadThread != null) {

        mReadThread.start();

    }

}


@Override

public void onStop() {

    super.onStop();

    if (mReadThread != null) {

        mReadThread.interrupt();

    }

}

更多:最好mReadThread在父类中编写一个初始化方法,在某些情况下,如果mReadThread对象在启动线程时为空,您可以调用该方法。像这样的东西:


public void init() {

   mReadThread = new ReadThread();

   mReadThread.start()

}

然后onStart你可以写:


    @Override

public void onStart() {

    super.onStart();

    if (mReadThread != null) {

        mReadThread.start();

    } else {

        init();

    }

}


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信