2017-04-12 85 views
-1

我有一個Handler在活動中聲明爲全局變量。該處理程序接收來自線程的消息並更新de UI。處理程序不會在ondestroy()後更新UI

一切工作正常,直到應用程序發送到背景,調用onDestroy。

當我回到應用程序時,線程不斷髮送消息給處理程序,它會在UI上進行更改,但不會再顯示這些更改。

我不想在onpause之後停止線程,因爲它必須要讀取我需要的一些信息,即使應用程序在後臺也是如此。

我該如何得到這個工作?

這是聲明爲全局變量的處理程序:

Handler hRefreshData=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     edText2 = (EditText) findViewById(R.id.textarea2); 
     edText2.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 
     edText2.setTextSize(20); 
     edText2.setBackgroundColor(Color.rgb(255, 255, 255)); 
     edText2.setText(""); 
     for (int i = 0; i < tag_db_index; i++) { 
      if (tag_db[i].getActive() == TRUE) { 
       edText2.append("[" + i + "]\t"); 
       edText2.append("ANT " + tag_db[i].tag.getAntenna() + "\t"); 
       edText2.append("\n"); 
      } 
     } 
    } 

這是線程,開始當用戶按下按鈕閱讀:

thrRead = new Thread() { 
     public void run() { 
      while (bRunningRead) { 

       // El siguiente método realiza sólo lectura (la conexión ya está abierta) 
       aReadTags = lectura(); 
       processTags(); 
       try{ 
        semaforo.acquire(); 
        copyaReadTags(); 
        semaforo.release(); 
       } 
       catch(InterruptedException e) 
       { 

       } 

       Message m = new Message(); 
       if (bRunningRead) 
        hRefreshData.sendMessage(m); 

      } 

     } 
    }; 
    thrRead.start(); 
+0

顯示您的代碼。 – Piyush

+1

您應該對服務,警報或作業執行後臺任務,並在任何可見時讓活動請求/偵聽任務的更新。您正在使用錯誤的機制來完成任務 –

+0

閱讀關於Android中如何使用tondo後臺任務的信息。網上有很多信息。 –

回答

0

我得到這個使用線程。我不使用處理程序,而是使用廣播接收程序。我需要的全局變量,我將它們保存在應用程序級別,以便在活動中調用onDestroy時不會丟失它們。