2011-08-24 59 views
0

我有一個開始按鈕來啓動我的下載數據的功能(startdownload())。 當開始按鈕點擊我已經放置了一個文本視圖,顯示數據是dowmload開始和下載完成時相同的文本視圖顯示下載完成。下載功能被放置在一個線程下。線程執行問題

start_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) {      

       Status.setText("Download Started"); 

       Thread t = new Thread(){  
        public void run() {     
         startdownload();             
         runOnUiThread(new Runnable() {            
          public void run() {         
           Status.setText("Download Completed"); 
           }     
          });    
         }};   
         t.start(); 
      } 
     }); 

另外我有一個停止按鈕以停止下載數據,其停止線程,並顯示下載使用相同文本視圖如上mentioned.the停止按鈕停止代碼是如下

stop_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) {   
       onStop(); 
       Status.setText("Download Stopped");    

      } 

public void onStop() { 
     super.onStop(); 
     isRunning = false; 
     } 

的問題是,當我點擊開始按鈕的文本視圖顯示下載開始,但當點擊停止按鈕之前,完全下載數據它顯示下載停止 在文本視圖中,並在一段時間後,它顯示下載完成.....

請任何人驗證是否有任何問題與我的線程實現過程... 我認爲多數民衆贊成爲什麼它顯示下載完成,即使當我停止線程使用停止按鈕....請幫助我......

+0

請顯示您如何停止線程的代碼。 –

回答

1

我認爲你可以從線程更新UI,所以請嘗試使用處理程序。

謝謝。

1

你真的停止線程嗎?或者在按下停止按鈕後繼續運行? 您可以使用標誌isStopped和螺紋:

if (!isStopped) {             
    runOnUiThread(new Runnable() {            
     public void run() {         
      Status.setText("Download Completed"); 
     }     
    });    
} 

和stop_button設置isStopped爲true。

+0

我想停止線程時停止按鈕click.No需要繼續 –

+0

@arun,比檢查葉戈爾的[答案](http://stackoverflow.com/questions/7171898/problem-with-thread-implementation/7172213#7172213 ) –

1

如果onStop()Activity.onStop()回調方法,那麼你不應該調用它。它與你的下載線程無關,無論如何它只是系統調用的系統回調。實際上,不建議您自己停止線程,因爲您可能知道,不推薦使用Thread.stop()方法。在一個循環中「停止」正在執行某些操作的線程很容易:您只需放下控制循環的標誌,結果是線程繼續運行,但它什麼都不做。您的應用程序架構不會讓您停止線程,因爲您只是在運行任務。發佈你的下載代碼,它會更清楚你正在做什麼,你試圖達到什麼。

+0

請你給我提供樣品... –

+0

@阿倫,什麼樣的樣品?你仔細閱讀了我的答案嗎?我建議你閱讀這篇文章:http://developer.android.com/resources/articles/painless-threading.html,它有一些關於在Android中實現多線程的有用信息 – Egor