我需要写个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; } }}