在日常的开发过程中经常会需要用到倒计时或者延时。前段时间的有一个延迟自动关闭dialog的需求,进度条需要等待一会才会到达100%,当时我直接
···
Thread.sleep(3000);
dismiss();
···
,这样子并没有达到我要的等待的效果,而且还可能造成主线程阻塞,真是无知啊。这篇博客也写一下倒计时和延时常用的方式吧,作为一个学习笔记。本篇博客写了三种倒计时的方式。
handlerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bootNextTime = 11;
UIHandler.sendEmptyMessage(1);
}
});
···
private int bootNextTime = 11;
private Timer timer;
private Handler UIHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "msg.what=" + msg.what);
switch (msg.what) {
case 1:
bootNextTime--;
mTextView.setText("正在设置倒计时关机,请在 " + bootNextTime + "s 内不要断开电源 !!!");
if (bootNextTime > 0) {
sendEmptyMessageDelayed(1, 1000);
} else {
mTextView.setText("倒计时关机已设置完成!");
}
break;
首先我们用UIHandler.sendEmptyMessage(1);
去启动UIHandler,然后在handleMessage方法里面每隔一秒给自己发一次sendEmptyMessageDelayed(1, 1000);
一直到倒计时时10秒。
mTimerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bootNextTime = 11;
bootNextTime--;
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
UIHandler.sendEmptyMessage(2);
}
};
timer = new Timer();
timer.schedule(timerTask, 0, 1000);
}
});
···
case 2:
bootNextTime--;
mTextView.setText("正在设置倒计时关机,请在 " + bootNextTime + "s 内不要断开电源 !!!");
if (bootNextTime == 0) {
mTextView.setText("倒计时关机已设置完成!");
timer.cancel();
}
break;
timer.schedule(timerTask, 0, 1000);
每隔一秒会执行一次,我们在UIHandler中根据bootNextTime的值来判断倒计时的此时,并且要注意timer.cancel();
取消timer。
如果没有耗时操作是不需要用到子线程的,这面还是列出来。
首先定义HandlerThread
private HandlerThread handlerThread;
然后onCreate中初始化HandlerThread 和 workhandler
handlerThread = new HandlerThread(“倒计时”);
handlerThread.start();
initHandler();
initHandler() 的 方法如下,将handlerThread 的looper传给这个handler 用于处理耗时操作,当然这里其实没有耗时操作,子线程更新UI 可以用UIHandler.post
和runOnUiThread
private void initHandler() {
//子线程
workHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(final Message msg) {
switch (msg.what) {
case 1:
//
bootNextTime--;
UIHandler.post(new Runnable() {
@Override
public void run() {
mTextView.setText("正在设置倒计时关机,请在 " + bootNextTime + "s 内不要断开电源 !!!");
}
});
if (bootNextTime > 0) {
removeMessages(1);
sendEmptyMessageDelayed(1, 1000);
}else {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText("倒计时关机已设置完成!");
}
});
}
break;
}
}
};
}
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。