android 定时器的实现比较
Android 实现 比较 定时器
2023-06-13 09:12:39 时间
大家好,又见面了,我是你们的朋友全栈君。
第一种,Handler+ thread
public class MainActivity extends Activity {
TextView textView;
int time;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
textView.setText(msg.arg1 + "");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test_time);
textView.setText(time + "");
new Thread() {
@Override
public void run() {
int times = 0;
while (true) {
try {
Thread.sleep(1000);
Message message = new Message();
message.arg1 = times;
times++;
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
这种明显的是使用了另外一个线程,在android开发中,速度是很重要的,开启线程都是需要进行消耗大量资源的,android不必web,他的资源有限,所以我们在不必要的时候,不要开启线程,结果是:
结果很简单
第二种:Handler + postDelyed
TextView textView;
int time = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test_time);
System.out.println("Main Name : "
+ Thread.currentThread().getName());
handler.postDelayed(runnable, time);
}
Handler handler = new Handler();
Runnable runnable = new Runnable() {
int i = 0;
@Override
public void run() {
System.out.println("Name : "
+ Thread.currentThread().getName());
textView.setText(i + "");
handler.postDelayed(this, time);
i++;
}
};
结果打印如下:
可以看出,这种的定时效果是在主线程中的并且实在MessageQuence中进行实现的:
needWake = mBlocked && p.target == null && msg.isAsynchronous();
Message prev;
for (;;) {
prev = p;
p = p.next;
if (p == null || when < p.when) {
break;
}
if (needWake && p.isAsynchronous()) {
needWake = false;
}
}
msg.next = p; // invariant: p == prev.next
prev.next = msg;
}
这是android的源码,他确实没有启动线程
第三种:Handler+Timer+TimerTask
TextView textView;
int time = 10000;
int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.test_time);
System.out.println("Main Name : "
+ Thread.currentThread().getName());
// handler.postDelayed(runnable, time);
timer.schedule(timerTask,0,10000);
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
textView.setText(i++ + "");
}
};
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("Name : "
+ Thread.currentThread().getName());
Message message = new Message();
handler.sendMessage(message);
}
};
打印图:
可以看出,这个也是自己启动了一个线程,实在线程中进行定时的
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160058.html原文链接:https://javaforall.cn
相关文章
- android galley实现画廊效果
- 如何让Android平台像IPC一样实现GB28181前端设备接入
- android 验证码短信验证码,Android短信验证码倒计时验证的2种常用方式
- android线程通信的几种方式_java多线程的实现方式
- 【Android自定义控件】不用ScrollView实现上下两屏滑动
- Android代码静态检查(lint、Checkstyle、ktlint、Detekt)
- android 设置系统dialog 样式
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )
- 【Android 逆向】加壳技术识别 ( 函数抽取 与 Native 化加壳的区分 | VMP 加壳与 Dex2C 加壳的区分 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- 【愚公系列】2023年04月 攻防世界-MOBILE(基础android)
- Android弹性收缩自适应布局FlexboxLayout详解手机开发
- [android] androidPN开源项目介绍详解手机开发
- Android系统与Linux之间的联系(android和linux)
- Android系统基于Linux内核,实现移动设备突破极限。(android linux内核)
- Android 12 将可以让你用微笑控制智能手机
- android手机获取gps和基站的经纬度地址实现代码
- Android开发之串口编程原理和实现方式
- android计时器,时间计算器的实现方法
- Android工程:引用另一个Android工程的方法详解
- 基于Android中实现定时器的3种解决方法
- Android开机自启动服务的实现方法
- android游戏载入的activity跳转到游戏主菜单的activity具体实现
- Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络
- android读写sd卡操作写入数据读取数据示例
- Android中使用ListView实现漂亮的表格效果
- Android中通过view方式获取当前Activity的屏幕截图实现方法