我需要写个while true 循环,在循环内计算,采集信息,然后显示在屏幕上。发现while在运行时,界面死机,根本不可控制,也不会显示到界面。这可怎么办?比如:
public flag=true
while (flag)
{
    string mtext="now is"+getime();
    tvTime.setText(mtext);  //显示到界面}我想通过界面上的按钮来控制flag得值,从而控制while循环的停止、启动。但界面死了,while一直运行,退不出来。界面和while循环怎么交互啊。

解决方案 »

  1.   

    whlle(true)这类的费时操作,应该放在另一个线程中
    然后在这个线程中通过Handler机制,来通知UI线程更新界面
    你学会Handler应该就可以处理这个问题了
      

  2.   

    public flag=true
    while (flag)
    {
    System.out.println("看看打了多少条记录")  
    string mtext="now is"+getime();
      tvTime.setText(mtext); //显示到界面}
    可以加个延时,1S一次。
      

  3.   


    刚开始,还没学会Handler是怎么回事,5555
      

  4.   

    Handler简单例子 
    http://blog.csdn.net/coding_or_coded/article/details/7333133
      

  5.   


    看了,  mHandler.sendMessage(message); 不知可不可以发送一个数组呢? 我要显示的是一个大数组。 
      

  6.   

    给你整一段吧package com.fl.utils;import java.text.SimpleDateFormat;
    import java.util.Date;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.Button;
    import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {
    private Button btnChange;
    private TextView txtInfo;
    private Boolean flag = true;
    private Handler handler = new Handler() { @Override
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case 0x11://A处
    txtInfo.setText(msg.getData().getString("key"));
    break;
    default:
    break;
    }
    }
    }; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btnChange = (Button) findViewById(R.id.change);
    btnChange.setOnClickListener(this);
    txtInfo = (TextView) findViewById(R.id.info);
    new Thread() { @Override
    public void run() {
    while (flag) {
    Message msg = new Message();
    msg.what = 0x11;//消息ID,与A处一致,A处才能接受到这个消息
    Bundle data = new Bundle();
    data.putString("key", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    .format(new Date()));
    msg.setData(data);//传递数据
    handler.sendMessage(msg);
    }
    }
    }.start();
    } @Override
    public void onClick(View v) {
    if (v == btnChange) {
    flag = false;
    }
    }
    }
      

  7.   

    最简单的设计思路是用while循环读出来数据,然后再将其显示出来。