簡體   English   中英

退出活動時終止線程(android)

[英]terminate a thread when exiting an activity (android)

我在Android的輔助活動中創建了一個線程,如下所示:

new Thread(new Runnable() {
                public void run() {
                    try {
                        String branch=spinner.getSelectedItem().toString();

                        while( branch.equals(spinner.getSelectedItem().toString())){
                            System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
                            GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
                            Thread.sleep(refreshRate);                              
                        }
                    } catch (InterruptedException e){
                        e.printStackTrace();
                    } 
                 return;
                }
              }).start();

問題是,當我返回主活動時,該線程仍在運行。 我所做的是在goback按鈕上編寫以下代碼:

spinner.setSelection(0);
this.finish();

這樣,更改微調器的值,從而導致線程上的while循環返回false,從而退出線程。 但是我不認為這是正確的方法。 誰能提出一些不同的建議,或者我應該說更好

離開活動時,應使用線程的interrupt()方法。

YourThread.interrupt();

new Thread(new Runnable() {
                public void run() {
                    try {
if(!Thread.interrupted())
                        String branch=spinner.getSelectedItem().toString();

                        while( branch.equals(spinner.getSelectedItem().toString())){
                            System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
                            GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
                            Thread.sleep(refreshRate);                              
                        }
                    } catch (InterruptedException e){
                        e.printStackTrace();
                    } 
                 return;
                }
              }).start();

沒有明確可用的方法來停止線程。 以前有一些方法可以停止線程,但是不建議使用。 請閱讀以下鏈接,以了解Java開發人員為何如此希望這樣做: http : //docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

根據本文檔,他們希望您按照建議的方式進行操作。 所以你沒看錯。

 private volatile boolean stopThread;

   public void run() {
      String branch=spinner.getSelectedItem().toString();
      while (!stopThread) {
        System.out.println("----LOOPER."+spinner.getSelectedItem().toString());
        GetQinfo a= (GetQinfo) new GetQinfo().execute(city,type,org,spinner.getSelectedItem().toString());
        Thread.sleep(refreshRate); 
      }
   }


public void stopThread() {
    stopThread = true;
    thread.interrupt();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM