Android中使用计时器的三种方式

就自己而言知道的三种方式都有:

1、handler 2、Timer 3、ScheduleExecutorService(时间执行者服务)

1、先写一个图片数组
int[] images = new int[]{R.mipmap.1,R.mipmap.3,
R.mipmap.3,R.mipmap.4,R.mipmap.5,R.mipmap.6};
2、在MainActivity中声明一个全局的Handler
public class HanderTimer extends Activity{
private ImageView image;
private TextView text;
private int count=0;
private int totalTime = 5;
private MyRunnable runnable;
private Timer timer;
private ScheduledExecutorService ses
private Handler handlerTimer = new Handler();
private Handler hander = new Handler(){public void handleMessage(Message msg){super.handlerMessage(msg);image.setImageResource(images[count++]%images.length);}
};
public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();
}
private void initViews(){image = findViewById(R.id.image_main);text = findViewById(R.id.text_main);
}
}
3、在 onCreate()方法中写两个方法
cyclicImage();
startClock();private void cyclicImage(){1、Handler方法//需要自定义一个类MyRunnable 实现Runnable对象runnable = new MyRunnable(handler);new Thread(runnable).start();2、Timer方法//使用java的Timer类timer = new Timer();timer.schedule(new TimerTask(){public void run(){handler.sendEmptyMessage(0);}},1000,1000);3、ScheduExecutorService方法//使用工厂类方法ses=Executors.newSingleThreadScheduledExecutor();ses.scheduleWithFixedDelay(new Runnable(){public void run(){handler.sendEmptyMessage(0);}},1,1,TimeUnit.SECONDS);
}private void startClock(){//需要另外初始化一个空的HandlerhandlerTimer.postDelayed(new Runnable(){@Overridepublic void run(){if(totalTime > 0){text.setText(totalTime+"秒后退出!");totalTime--;handlerTimer.postDelayed(this,1000);//此处的this 是Runnable对象,用递归的方法将时间减少。}else{textView.setText("");将0秒或负数的设为空//1、handler的方法将图片停止循环handler.setmFlag(flase);//2、Timer的方法将图片停止循环timer.cancel();//3、ScheduleExecutorService的方法将图片停止循环ses.shutdown();}}
},1000);
}//自定义一个MyRunnable
public class MyRunnable implements Runnable{private boolean mFlag = ture;private Handler mHandler;public void setmFlag(boolean flag){this.mFlag = flag;}public MyRunnable(Handler handler){this.mHandler = handler;}@Overridepublic void run(){while(mFlag){try{Thread.sleep(1000);mHander.sendEmptyMessage(0);}catch(InterruptedException e){e.printStackTrace();}}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部