亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在我的父類中強制關閉線程

如何在我的父類中強制關閉線程

大話西游666 2022-07-27 20:48:28
我有一個來自父類的活動繼承?,F在,當我離開我的 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 關注
  • 78 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號