Android考虑到线程安全问题,不允许在线程中执行UI线程。

所以在线程中不允许有UI操作

可以利用Handler机制来接收Timer每隔一秒发出的信息,也可以直接利用handler机制的

1、方法一:Handler+Thread

package com.example.yuyin_lixian;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; import java.util.Timer;
import java.util.TimerTask; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; /**
* handler定时器
*
* @author Smalt
*
*/
public class MainActivity extends Activity {
TextView tvShow;
private int i = 0; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvShow = (TextView) findViewById(R.id.textView1);
new Thread(new ThreadShow()).start();
} // handler类接收数据
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tvShow.setText(Integer.toString(i++));
System.out.println("receive....");
}
};
}; // 线程类
class ThreadShow implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(1000); //每隔一秒执行一次
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
System.out.println("send...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("thread error...");
}
}
}
}
}

2、方法二:Handler类自带的postDelyed

其中使用PostDelayed方法,1秒后调用此Runnable对象
handler.postDelayed(runnable, 1000); 实际上也就实现了一个1s的一个定时器

如果想要关闭此定时器,可以这样操作
handler.removeCallbacks(runnable);

package com.example.yuyin_lixian;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView; /**
* handler定时器使用postDelyed实现
*
* @author Smalt
*
*/
public class MainActivity extends Activity {
TextView tvShow;
private int i = 0;
private int TIME = 1000; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvShow = (TextView) findViewById(R.id.textView1);
handler.postDelayed(runnable, TIME); //每隔1s执行
} Handler handler = new Handler();
Runnable runnable = new Runnable() { @Override
public void run() {
// handler自带方法实现定时器
try {
handler.postDelayed(this, TIME);
tvShow.setText(Integer.toString(i++));
System.out.println("do...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("exception...");
}
}
}; }

3、方法二:Handler+Timer+TimerTask

package com.example.yuyin_lixian;

import java.util.Timer;
import java.util.TimerTask; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView; /**
* 定时器实现:Handler+Timer+TimerTask
*
* @author Smalt
*
*/
public class MainActivity extends Activity {
TextView tvShow;
private int i = 0;
private int TIME = 1000; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvShow = (TextView) findViewById(R.id.textView1);
timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行
} Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
tvShow.setText(Integer.toString(i++));
}
super.handleMessage(msg);
};
};
Timer timer = new Timer();
TimerTask task = new TimerTask() { @Override
public void run() {
// 需要做的事:发送消息
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
}

最新文章

  1. node03-events
  2. 【转载】Log4j详细使用教程
  3. Technical news July-11
  4. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
  5. placeholder在ie789下无效
  6. python中关于正则表达式二
  7. mongodb学习(三) 安装和基本CRUD
  8. Java基础之路(一)下--引用数据类型之数组
  9. 将php项目打包docker镜像
  10. Hadoop压缩
  11. 【SAP业务模式】之STO(一):业务背景和前台操作
  12. 中国剩余定理 CRT
  13. Hbase记录-备份与恢复方案推荐
  14. web api 跨域访问
  15. 共享单车微信小程序
  16. 【opencv基础】imread-第二个参数
  17. HttpClient和HttpURLConnection的使用和区别(上)
  18. 移动端 vconsole 的使用
  19. 洛谷 P1013 进制位 【搜索 + 进制运算】
  20. 逆向project第005篇:跨越CM4验证机制的鸿沟(下)

热门文章

  1. 【原创】【1】rich editor系列教程。前期准备,兼容
  2. 【loj2472】IIIDX
  3. vmware中ubuntu虚拟机扩容
  4. JS中如何使用EL表达式中的对象
  5. laravel 5.5 在构造函数使用Session
  6. 使用rabbitmq消息队列
  7. at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) :json转化“$ref 循环引用”的问题
  8. windows下libcurl与zlib和ssl共同编译
  9. mac activemq
  10. 数学:FFT