当前位置: 代码迷 >> Android >> 请问while 循环 与界面交互的有关问题。多谢
  详细解决方案

请问while 循环 与界面交互的有关问题。多谢

热度:503   发布时间:2016-05-01 21:47:00.0
请教while 循环 与界面交互的问题。谢谢。

我需要写个while true 循环,在循环内计算,采集信息,然后显示在屏幕上。发现while在运行时,界面死机,根本不可控制,也不会显示到界面。这可怎么办?

比如:
public flag=true
while (flag)
{
  string mtext="now is"+getime();
  tvTime.setText(mtext); //显示到界面

}

我想通过界面上的按钮来控制flag得值,从而控制while循环的停止、启动。但界面死了,while一直运行,退不出来。

界面和while循环怎么交互啊。

------解决方案--------------------
whlle(true)这类的费时操作,应该放在另一个线程中
然后在这个线程中通过Handler机制,来通知UI线程更新界面
你学会Handler应该就可以处理这个问题了
------解决方案--------------------
Handler简单例子 
http://blog.csdn.net/coding_or_coded/article/details/7333133
------解决方案--------------------
给你整一段吧。。。
Java code
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;        }    }}
  相关解决方案