public
class
TestActivity
extends
Activity{
private
TextView mTextView;
private
Handler mHandler;
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHandler =
new
Handler();
mTextView = (TextView) findViewById(R.id.text);
mHandler.post(
new
Runnable() {
@Override
public
void
run()
{
// TODO Auto-generated method stub
mTextView.setText(String.valueOf((Math.random() *
100
)));
mHandler.postDelayed(
this
,
2000
);
}
});
}
}
使用Handler,它有一个方法postDelayed(Runnable , long); Runnable是一个线程,可以是在textView上写数据; long代表延时,单位是毫秒。
main.xml中就是一个textview。
代码就是通过Handler不断把写textview的线程放到消息队列中,系统从消息队列获取消息后,就在UI线程绘制textview。
这样就能在停留此Activity两秒后不断循环执行更新TextView的内容(要记得适当位置加上handler.removeCallbacks(this); 停止Handler,否则有可能因主UI线程阻塞而出错,可以在onstop()、ondestory()加上),但是如果想要在后台不断更新数据,跳到其他Activity还能向后台获得数据并更新数据,就要在Service使用心跳算法,不断向服务器申请了。。。
最终修改为:
public class MyListActivity extends Activity {
private ListView lv_scheme = null;
private TextView tv_refresh;
private SchemeAdapter adapter = null;
private TextView tv_title = null;
/** 用于不断更新数据 */
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
adapter.clear();
initList();
L.e("每隔5秒更新一次航班列表");
handler.postDelayed(this, 10000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.act_scheme);
initControler();
initList();
initListener();
}
private void initControler() {
lv_scheme = GetControl(R.id.lv_scheme);
tv_refresh = GetControl(R.id.tv_refresh);
tv_title = GetControl(R.id.tv_title);
adapter = new SchemeAdapter(lv_scheme, this);
tv_title.setText(AppConfig.getInstance().getDockName());
}
/** 获取服务器信息 */
private void initList() {
SchemeSend data = new SchemeSend();
data.p_ID = AppConfig.getInstance().getId();
Type type = new TypeToken<List<SchemeResponse>>() {
}.getType();
SchemeController.getInstance().httptask(SchemeController.CMD_GETLIST, data, MyListActivity.this, new OnArrayListHttpResponse<SchemeResponse>(type) {
@Override
public void res(final List<SchemeResponse> response, Object send) {
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.addDataList(response);
adapter.refash();
}
});
}
@Override
public void onBillError(int errcode, String errmessage, Object send) {
}
}, "正在获取列表");
}
private void initListener() {
tv_refresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
adapter.clear();
initList();
}
});
}
@Override
protected void onStart() {
handler.postDelayed(runnable, 6000);
super.onStart();
}
@Override
protected void onStop() {
handler.removeCallbacks(runnable);
super.onStop();
}
}