我在做一个从服务器下载 文字后  显示到TextView的程序的时候
  在下载前  启动了 一个 圆形进度条  下载是在一个新的线程中完成的
 之前  进度条可以转动 , 之后  当下载完成之后   执行TextView.setText();操作的时候
进度条 不动 了   我是用Handler 发送信息  更新TextView 的  
 是不是因为  在更新TextView的时候  阻塞了  进度条的转动 , 不是很懂   大家帮帮忙

解决方案 »

  1.   

    http://qq361119908.iteye.com/blog/649352
      

  2.   


    public void onCreate(Bundle savedInstanceState) 
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.txtread);
         handler = new Handler(this);
         
         addto = (Button) findViewById(R.id.tianjia);
         tv_title = (TextView) findViewById(R.id.txtreadtitle);
         tv_txt = (TextView) findViewById(R.id.txtreadtxt);
         
         Intent intent = this.getIntent();
         title = intent.getStringExtra("title");
         
         if(intent.getStringExtra("type").equals("nobutton"))
         {
          addto.setVisibility(View.GONE);
         }
         txt = FileManager.get(title);
         
         addto.setOnClickListener(new OnClickListener()
         {
          @Override
          public void onClick(View v)
          {
          // TODO Auto-generated method stub
          FKActivity.dbhelper.insertData(title,
      FileManager.get(title));
     Toast.makeText(TextReadActivity.this, TextReadActivity.this
     .getString(R.string.tjcg), 8000)
    .show();
          }
         });
         loading();
     }
     private void loading()
     {
                    //启动进度条
    startProgressDialog(getResources().getString(R.string.loading));
    handler.postDelayed(new Runnable()
     {
    public void run()
    {
                                     //这个是从服务器上 下载文字 
     initText();
                     
     Message msg = new Message();
         msg.what = 0;
         handler.sendMessage(msg);
       }
     },1);
     }private void startProgressDialog(String string)
     {
     pd = new ProgressDialog(this);   
     pd.setMessage(string);      
     pd.show();   
     }
     private void initText()
     {
     HttpDownload hd = new HttpDownload(TextReadActivity.this);
     String download = hd.downLoad(hd.id+txt);
         words = download;
     }
     @Override
     public boolean handleMessage(Message msg)
     {
     // TODO Auto-generated method stub
     switch(msg.what)     
     {      
    case 0:  
    //就是执行 接下来这两句的时候 ,
                                        //界面卡住  进度条不动了
    tv_title.setText(title);
    tv_txt.setText(words);
    pd.dismiss();

    break;
     }       
     return true;
     }
    主要的代码 就是这样子的    
      

  3.   


    我试了下你的代码,可以的。你是不是handler定义错了。我一开始也只是new handel()。捕获不到消息。应该是new handel(main.this)
      

  4.   

    嗯  可以是可以啊  就是  在settext的时候 会卡住   你运行的效果不是这样子的吗
      

  5.   

    我感觉你会卡住的问题应该是主线程阻塞,你可以new一个子线程去管理你的progressDialog,因为就一个主线程同时是肯定不能做两件事的(一是你的settext,一是你的progressDialog更新)
      

  6.   

    把你启动Runnable对象放到一个Thread对象里,应该是UI线程卡死了
      

  7.   

    嗯  我也是你这么想的  所以我开了一个线程来更新 progressdialog 更新  可是   就没出现progressdialog了
      

  8.   


    不会卡主的啊。我除了没执行你那个initText()方法,其他都按照你的写法来的,执行正确的
      

  9.   


    主线程没同事做两件事啊,settext在前,progressDialog在后,怎么会阻塞呢。况且我这边按照你的写法也证明没阻塞。要么你把你完整代码和布局文件帖下,我拿过来试下可不可以
      

  10.   

    public class Read extends Activity implements Callback
    {
     private String title = null;
     private String txt = null;
     private String words = null;
     private TextView tv_title = null;
     private TextView tv_txt = null;
     private ProgressDialog pd = null;
     private Handler handler = null;
     
     public void onCreate(Bundle savedInstanceState) 
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.read);
         handler = new Handler(this);
         
         tv_title = (TextView) findViewById(R.id.txtreadtitle);
         tv_txt = (TextView) findViewById(R.id.txtreadtxt);
         
         Intent intent = this.getIntent();
         title = intent.getStringExtra("title");
         
         txt = FileManager.get(title);
         
         loading();
     }
     private void loading()
     {
     
     startProgressDialog(getResources().getString(R.string.loading));

     handler.postDelayed(new Runnable()
     {
    public void run()
    {
     initText();
             
     Message msg = new Message();
         msg.what = 0;
         handler.sendMessage(msg);
         System.out.println("sendmsg");
    }
     },1);
     }
     private void startProgressDialog(String string)
     {
     pd = new ProgressDialog(this);   
     pd.setMessage(string);      
     pd.show();   
     }
     private void initText()
     {
     HttpDownload hd = new HttpDownload(Read.this);
     String download = hd.downLoad(hd.id+txt);
             words = download;
     }
     @Override
     public boolean handleMessage(Message msg)
     {
     // TODO Auto-generated method stub
     switch(msg.what)     
     {      
    case 0:  

    tv_title.setText(title);
    tv_txt.setText(words);

    pd.dismiss();

    break;
     }       
     return true;
     }
     
     
    完整代码 就是这样子的      你试试看   我用的是1.6的虚拟机    
      

  11.   


    是的。除了下载的没有。我把我这边能通过的代码贴给你package test.main;import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Handler.Callback;
    import android.os.Message;
    import android.widget.TextView;
    import android.widget.Toast;public class test1 extends Activity  implements Callback{

    private String title = null;
        private String txt = null;
        private String words = null;
        private TextView tv_title = null;
        private TextView tv_txt = null;
        private ProgressDialog pd = null;
        private Handler handler = null;
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.test1);
            
            handler = new Handler(this);
            
            tv_title = (TextView) findViewById(R.id.txtreadtitle);
            tv_txt = (TextView) findViewById(R.id.txtreadtxt);
            title="title";
            
    //        Intent intent = this.getIntent();
    //        title = intent.getStringExtra("title");
    //        
    //        txt = FileManager.get(title);
            
            loading();        
        } private void loading()
        {
            
            startProgressDialog("dialog");
           
            handler.postDelayed(new Runnable()
            {
               public void run()
               {
                    initText();
                    
                    Message msg = new Message();
                    msg.what = 0;
                    handler.sendMessage(msg);
               }
            },1);
           
        }
        private void startProgressDialog(String string)
        {
            pd = new ProgressDialog(this);   
            pd.setMessage(string);      
            pd.show();   
        }
        private void initText()
        {
    //        HttpDownload hd = new HttpDownload(Read.this);
    //        String download = hd.downLoad(hd.id+txt);
    //            words = download;
         words="mytest";
        }
        @Override
        public boolean handleMessage(Message msg)
        {
            // TODO Auto-generated method stub
            switch(msg.what)     
            {      
               case 0:  
                   
                   tv_title.setText(title);
                   tv_txt.setText(words);
                   pd.dismiss();
                   
                   break;
            }       
            return true;
        }}<?xml version="1.0" encoding="utf-8"?>   
    <LinearLayout    
    xmlns:android="http://schemas.android.com/apk/res/android"   
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/common_bg_middle"
    >
        <EditText android:layout_height="wrap_content" android:id="@+id/txtreadtitle" android:text="EditText" android:layout_width="match_parent"></EditText>
        <EditText android:layout_height="wrap_content" android:id="@+id/txtreadtxt" android:text="EditText" android:layout_width="match_parent"></EditText>
           </LinearLayout>
      

  12.   

    不是跟你说了吗,不要起Runnable对象,要起Thread对象,明白不