方法一:message+handler
package com.time; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.TextView; public class timer extends Activity { private int recLen = 11; private TextView recTime; Handler handler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case 1: recLen--; recTime.setText(""+recLen); if(recLen > 0){ // Message message = Message.obtain(); // message.what = 1; Message message = handler.obtainMessage(1); handler.sendMessageDelayed(message, 1000); }else{ recTime.setVisibility(View.GONE); } break; } super.handleMessage(msg); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); recTime = (TextView)findViewById(R.id.time); Message message = handler.obtainMessage(1); handler.sendMessageDelayed(message, 1000); } }
方法二:timer+timertask
package com.tim; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class timer1 extends Activity { private int recLen = 11; private TextView recTime; Timer timer = new Timer();; TimerTask task = new TimerTask(){ public void run() { recLen--; //修改界面的相关设置只能在UI线程中执行 runOnUiThread(new Runnable(){ public void run() { recTime.setText(""+recLen); if(recLen<0){ timer.cancel(); recTime.setVisibility(View.GONE); } }}); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); recTime = (TextView)findViewById(R.id.time); timer.schedule(task,1000, 1000); } }
该API可以在全局命名空间中使用。不需要明确地导入。 方法 clearInterval(id) 参数: id: any setInterval返回的ID。 取消与给定ID关联的定时器的运行。当给定无效的ID时,什么都不会发生。 clearTimeout(id) 参数: id: any setTimeout返回的ID。 取消与给定ID关联的定时器的运行。当给定无效的ID时,什么都不会发生。 setI
本文向大家介绍Android使用Handler和Message更新UI,包括了Android使用Handler和Message更新UI的使用技巧和注意事项,需要的朋友参考一下 在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用到Handler和Message来实现 Demo中,使用到一个按钮和一个TextVi
当q进程通过进程间通信连接到另一个q进程时,它由消息处理程序处理。 这些消息处理程序具有默认行为。 例如,在同步消息处理的情况下,处理程序返回查询的值。 在这种情况下,同步处理程序是.z.pg ,我们可以根据要求覆盖它。 Kdb +进程有几个预定义的消息处理程序。 消息处理程序对于配置数据库很重要。 一些用法包括 - Logging - 记录传入消息(有助于发生任何致命错误), Security
稳定性: 2 - 稳定的 timer 模块暴露了一个全局的 API,用于在某个未来时间段调用调度函数。 因为定时器函数是全局的,所以使用该 API 无需调用 require('timers')。 Node.js 中的计时器函数实现了与 Web 浏览器提供的定时器类似的 API,除了它使用了一个不同的内部实现,它是基于 Node.js 事件循环构建的。 Immediate 类 该对象是内部创建的,并
毫秒精度的定时器。底层基于epoll_wait和setitimer实现,数据结构使用最小堆,可支持添加大量定时器。 在同步IO进程中使用setitimer和信号实现,如Manager和TaskWorker进程 在异步IO进程中使用epoll_wait/kevent/poll/select超时时间实现 性能 底层使用最小堆数据结构实现定时器,定时器的添加和删除,全部为内存操作,因此性能是非常高的。
boolean WorkermanLibTimer::del(int $timer_id) 删除某个定时器 参数 timer_id 定时器的id,即add接口返回的整型 返回值 boolean 示例 use WorkermanWorker; use WorkermanLibTimer; require_once __DIR__ . '/Workerman/Autoloader.php'; $tas
int WorkermanLibTimer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true]) 定时执行某个函数或者类方法。 注意:定时器是在当前进程中运行的,workerman中不会创建新的进程或者线程去运行定时器。 参数 time_interval 多长时间执行一次