读书人

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

发布时间: 2012-03-30 17:32:09 作者: rapoo

请教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;        }    }} 

读书人网 >Android

热点推荐