2010-10-17 46 views
11
package com.commonsware.android.threads; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 

public class HandlerDemo extends Activity { 
    Thread mBackground; 
    ProgressBar bar; 
    Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
        bar.incrementProgressBy(5); 
      } 
    }; 
    boolean isRunning = false; 

    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 
      bar = (ProgressBar) findViewById(R.id.progress); 
    } 

    public void onStart() { 
      super.onStart(); 
      bar.setProgress(0); 

      mBackground = new Thread(new Runnable() { 
        public void run() { 
          try { 
            int a = 0; 
            for (int i = 0; i < 20 && isRunning; i++) { 
              for (int j = 0; j < 2000; j++) { 
                for (int k = 0; k < 1000; k++) { 
                  a++; 
                } 
              } 
              handler.sendMessage(handler.obtainMessage()); 
            } 
          } catch (Throwable t) { 
            // just end the background thread 
          } 
        } 
      }); 

      findViewById(R.id.LoginButton).setOnClickListener(
          new OnClickListener() { 
            public void onClick(View v) { 
              mBackground.run(); 
            } 
          }); 

      isRunning = true; 

    } 

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

}Android线程问题,为什么我仍然使用工作线程时阻塞?

我真的很困惑 ...那

回答

38

你需要调用start()方法无法运行()。

public void onClick(View v) { 
     mBackground.start(); //Start will spawn the Thread and then call it's run method. 
} 

通过在主线程中调用run(),您可以像任何常规方法调用一样在其中阻塞。

+1

对不起,我编辑的回答几次试图找出有多少要说的。最后,我决定只对答案发表评论。祝你好运。 – eSniff 2010-10-17 06:49:01

+0

你救了我的命::我试图为此自杀。 – 2016-07-11 05:39:31

0

试试这个代码

private void showProgrssBar(){ 
pLayout.setVisibility(View.VISIBLE); 
final StringBuffer s=new StringBuffer(); 
final Thread progressThread=new Thread(){ 
    @Override 
    public void run(){ 


      while(CreateVideoService.processingFrame>1) { 
       inc=100-((CreateVideoService.processingFrame*100)/(CreateVideoService.numberofRecordedFrames)); 
       if(s.length()>0) 
       s.delete(0, s.length()); 
       s.append("Processing... ").append(inc).append("%"); 
       progressBarHandler.post(new Runnable() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         progressBar.setProgress(inc); 
         textProgrs.setText(s); 
        } 
       }); 
       //progressBar.setProgress(100-inc); 
       try { 
        // Sleep for 5 seconds 
        Thread.sleep(200); 
       } catch (InterruptedException e) { 
        //Log.d("TAG", "sleep failure"); 
       } 
      } 
      layoutHandler.post(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        pLayout.setVisibility(View.GONE); 
       } 
      }); 

    } 
}; 
progressThread.start(); 
}