摘要:本文结合源代码详细分析一下基于message的定时器,在编写物联网应用APP的时候,获取传感器数据会用到这个功能。
想实现定时获取数据,然后在安卓APP上显示出来。
定时获取连接阿里云硬件属性的APP
安卓编程中,定时器的实现方式有很多种,本文介绍一种比较简单的用法。结合源代码讲解。
首先需要import一些库,其中Timer用于在后台线程中为将来执行任务调度任务的工具类。
import androidx.appcompat.app.AppCompatActivity;
import java.util.Timer;
import java.util.TimerTask;
然后需要创建一个Timer对象,接下来就可以用timer来调用它。
Timer timer = new Timer();
然后创建一个TimerTask对象,TimerTask是实现Runnable的一个静态类,我们创建任务时只需继承它,然后重写run方法。我们需要在run里面try一下我们需要做的工作。当然最重要的是发送message。这个message发出后,用mHandler来响应全局的一些操作。因为在task里面,有些操作是无法进行的。例如我们想在界面上的textview等控件显示数据,或者用其他控件显示曲线。
TimerTask task=new TimerTask() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
try {
textJson=value;
Message message = new Message();
mHandler.sendMessage(message);
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
};
//延迟时间,间隔时间*
timer.schedule(task,0,3000);
}
具体怎么样响应呢?需要在主线程中更新UI。我们用的就是handler,它是android中为了处理异步线程更新UI的问题而出现的一个工具,在android异步线程是不能够更新UI的,只能在主线程中更新UI。我们所要做的就是向handler中传递消息(就是刚才在定时器中发送的消息message),然后handler响应所传递来的消息。据说handler会有一个消息队列,是根据你出入的消息顺序排列的,handler会依次响应消息队列里面的消息。本文的例子只用到了一个message。
//在handler中更新UI
final Handler mHandler =new Handler(){
public void handleMessage(Message msg){
mTextView.setText(textJson);
}
};
最后将要给完整的例子列举如下,供大家参考。
- package com.example.XXXXX;
-
- import androidx.appcompat.app.AppCompatActivity;
-
- import java.util.Timer;
- import java.util.TimerTask;
-
-
- public class MainActivity extends AppCompatActivity {
-
- Timer timer = new Timer();//花生,准备使用定时器
-
- private static final String TAG = "MainActivity";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
-
- //在handler中更新UI
- final Handler mHandler =new Handler(){
- public void handleMessage(Message msg){
- mTextView.setText(textJson);
- }
- };
- TimerTask task=new TimerTask() {
- @Override
- public void run() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- textJson=value;
- Message message = new Message();
- mHandler.sendMessage(message);
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }).start();
- }
- };
- //延迟时间,间隔时间*
- timer.schedule(task,0,3000);
- }
-
- }
总结:定时器是一个非常重要的功能,对于物联网平台操作,大家一定要掌握。