安卓中定时器和线程的使用

安卓中常使用定时器来实现计时的任务,而使用线程来实现耗时的操作,如何通过Handler进行消息处理,这里做一下总结。
一、安卓定时器
使用安卓定时器需要以下三步:

1.定义定时器、定时器任务及Handler句柄

private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//要做的事情
super.handleMessage(msg);
}
};


2.初始化计时器任务。
task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};


3.启动定时器
timer.schedule(task, 2000, 2000);


简要说一下上面三步提到的一些内容。
1.定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。
2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。



二、安卓里的线程
安卓实现线程有两种方式:
1、扩展java.lang.Thread类 
Thread类代表线程类,它的两个最主要的方法是: 
run()——包含线程运行时所执行的代码 
Start()——用于启动线程
示例代码:
public class Demo_For_Copy extends Activity  
{  
    public Button button;  
    public Handler mHandler=new Handler()  
    {  
        public void handleMessage(Message msg)  
        {  
            switch(msg.what)  
            {  
            case 1:  
                button.setText(R.string.text2);  
                break;  
            default:  
                break;        
            }  
            super.handleMessage(msg);  
        }  
    };  
      
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        button=(Button)findViewById(R.id.button);  
  
        Thread thread=new Thread(new Runnable()  
        {  
            @Override  
            public void run()  
            {  
                Message message=new Message();  
                message.what=1;  
                mHandler.sendMessage(message);  
            }  
        });  
        thread.start();  
    }  
}  


2、实现Runnable接口
示例代码:
public class Title_Change_Demo extends Activity implements Runnable  
{  
    public Button button;  
    public LinearLayout my_layout;  
      
    public Handler mHandler=new Handler()  
    {  
        public void handleMessage(Message msg)  
        {  
            switch(msg.what)  
            {  
            case 1:  
                button.setText(R.string.text2);  
                break;  
            default:  
                break;            
            }  
            my_layout.invalidate();  
            super.handleMessage(msg);  
        }  
    };  
      
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        button=(Button)findViewById(R.id.button);  
        my_layout=(LinearLayout)findViewById(R.id.my_layout);  
          
        Thread thread=new Thread(this);  
        thread.start();  
    }  
      
    @Override  
    public void run()  
    {  
        Message message=new Message();  
        message.what=1;  
        mHandler.sendMessage(message);  
    }  
}  




三、Handler
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程), 
它有两个作用:
(1)安排消息或Runnable 在某个主线程中某个地方执行
(2)安排一个动作在不同的线程中执行 
Handler中分发消息的一些方法 
post(Runnable) 
postAtTime(Runnable,long) 
postDelayed(Runnable long) 
sendEmptyMessage(int) 
sendMessage(Message) 
sendMessageAtTime(Message,long) 
sendMessageDelayed(Message,long) 
以上post类方法允许你排列一个Runnable对象到主线程队列中, 
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.



四、为了实现线程问题,安卓提供了如下几种方案。
1、使用Handler实现线程之间的通信
2、Activity.runOnUiThread
3、View.post(Runable)、View.postDelayed(Runable,long)
4、Handler.post(Runnable)、Handler.postAtTime(Runnable,long)、Handler.postDelayed(Runnable,long)
5、使用异步任务(AsyncTask)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,你可以使用多种方法来实现多线程定时器功能。以下是一些常用的方法: 1. 使用Thread类:你可以创建一个新的Thread对象,并在其run()方法执行需要在后台线程运行的代码。你可以使用Thread.sleep()方法来实现定时器功能。例如: ```java new Thread(new Runnable() { public void run() { // 执行后台线程任务 while (true) { // 定时器功能 try { Thread.sleep(1000); // 延迟1秒 } catch (InterruptedException e) { e.printStackTrace(); } // 执行定时任务 // ... } } }).start(); ``` 2. 使用Handler类:Handler类可以用于在线程(UI线程)和后台线程之间进行通信。你可以使用Handler.postDelayed()方法来实现定时器功能。例如: ```java Handler handler = new Handler(); Runnable runnable = new Runnable() { public void run() { // 执行定时任务 // ... // 定时器功能 handler.postDelayed(this, 1000); // 延迟1秒 } }; handler.postDelayed(runnable, 1000); // 延迟1秒启动定时器 ``` 3. 使用Timer类:Timer类提供了一种更方便的方式来实现定时器功能。你可以使用Timer.schedule()方法来创建定时任务。例如: ```java Timer timer = new Timer(); TimerTask task = new TimerTask() { public void run() { // 执行定时任务 // ... } }; timer.schedule(task, 1000, 1000); // 延迟1秒启动定时器,每隔1秒执行一次 ``` 请注意,在Android开发,为了避免在线程执行耗时操作导致界面卡顿,建议将长时间运行的任务放在后台线程执行。以上是一些常见的多线程定时器的实现方式,你可以根据具体需求选择适合的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值