成都创新互联网站制作重庆分公司

android的定时器,安卓间隔定时器

android设置定时器调用时设置时间

你的意思是,假设3个RadioButton,第一个设为10秒,第二个设为20秒,第三个设为30秒,然后一起倒计时到0吗?如果是这样的话,只需要在Handler的handleMessage中去减时间就行了。

创新互联是专业的莱山网站建设公司,莱山接单;提供成都做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行莱山网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

xx.setText(Integer.parseInt(xx.getText()-1);

}

};

android定时器alarmmanager和timer的区别

在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了。

实验1:使用Java.util.Timer。

在onStart()创创建Timer,每5秒更新一次计数器,并启动。

Java代码

1mTimer = new Timer();

2mTimer.schedule(new TimerTask() {

3 @Override

4 public void run() {

5 ++mCount;

6 mHandler.sendEmptyMessage(0);

7 }

8 }, 5*1000, 5*1000);

当连接USB线进行调试时,会发现一切工作正常,每5秒更新一次界面,即使是按下电源键,仍然会5秒触发一次。

当拔掉USB线,按下电源键关闭屏幕后,过一段时间再打开,发现定时器明显没有继续计数,停留在了关闭电源键时的数字。

实验2:使用AlarmService:

2.1通过AlarmService每个5秒发送一个广播,setRepeating时的类型为AlarmManager.ELAPSED_REALTIME。

Java代码

1AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

2am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000, sender);

拔掉USB线,按下电源键,过一段时间再次打开屏幕,发现定时器没有继续计数。

2.2setRepeating是的类型设置为AlarmManager.ELAPSED_REALTIME_WAKEUP

Java代码

1AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

2am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender);

拔掉USB线,按下电源键,过一点时间再次打开屏幕,发现定时器一直在计数。

如此看来,使用WAKEUP才能保证自己想要的定时器一直工作,但是肯定会引起耗电量的增加。

Android开发——定时器处理

  开发中经常遇到用计时器的时候,例如:每秒输出一次log,这时候就要用到延时操作,这里总结了几种常用的方法。

   AlarmManager 是Android的全局定时器,可以在指定时间执行定时任务。定时任务通过PendingIntent 的 getActivity()、getService()或 getBroadcast() 来执行。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent出来,在接收到设定的Intent时执行定时任务。

(2) setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法用于设置重复闹钟,其中参数说明如下:

type:闹钟类型

startTime:首次执行闹钟的时间

intervalTime:两次执行闹钟的时间间隔

pi:闹钟响应动作

(3) setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法也用于设置重复闹钟,与第二个方法相似,区别在于其两次闹钟执行的间隔时间不是固定的。

   AlarmManager实现定时的方法,我还没有用到过,以上内容是在网上查找资料后自己在一个小demo中小小试验了的,有错误或描述不清的地方请见谅。下面是我参考的介绍AlarmManager的三篇文章。

android 定时器 如何实现

可以用Service+Broadcast+Handler来实现。

Handler在Service里

在Service里主要逻辑为:用Handler实现每分钟发送一次广播

Broadcast在Activity里,内部类的形式

Broadcast接收广播并调用某某方法。

核心:Activity开启服务,让服务每隔一分钟就发送一条广播通知调用某某方法。

这是Activity里的代码

public class MainActivity extends Activity  {

public Intent startService;

//发送广播需要的Action

public static final String BROADCAST_ACTION="broadcast.action";

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//在这里注册广播

IntentFilter filter = new IntentFilter();

filter.addAction(ConstantTool.BROADCAST_ACTION);

registerReceiver(myResver, filter);

//设置服务

startService = new Intent(MusicService.SERVICE_ACTION);

startService.setClass(this, MusicService.class);

}

//假设这是你每分钟都要调用一次的方法

private void initViews() {

}

//这个点击事件来控制什么时候开启服务

private OnClickListener clickListener=new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

startService(startService);

}

};

/**

 * 广播

 * 

 * @author Administrator

 * 

 */

class MyResver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

//首先判断你的Action是否一致

if (BROADCAST_ACTION.equals(intent.getAction())) {

//如果一致,那么就调用方法

initVies();

}

}

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

//销毁广播

unregisterReceiver(myResver);

}

}

Service里的代码

public class MusicService extends Service {

//这里面的值可以随意,因为在AndroidManifest里已经注册了

public static final String SERVICE_ACTION="service.action";

public MusicService() {

// TODO Auto-generated constructor stub

}

@Override

public IBinder onBind(Intent arg0) {

// TODO Auto-generated method stub

return null;

}

@Override

public void onCreate() {

// TODO Auto-generated method stub

super.onCreate();

}

//创建一个Handler

Handler mHandler = new Handler() {

public void handleMessage(android.os.Message msg) {

int currentTime = msg.arg1;

Intent broadcast = new Intent(MainActivity.BROADCAST_ACTION);

sendBroadcast(broadcast);

};

};

//创建一个线程

Runnable updateThread = new Runnable() {

@Override

public void run() {

if (mMediaPlayer != null) {

Message msg = mHandler.obtainMessage();

mHandler.postDelayed(updateThread, 60*1000);

}

}

};

@Override

public void onStart(Intent intent, int startId) {

// TODO Auto-generated method stub

super.onStart(intent, startId);

//在这里判断是否是启动服务的那个Action

if (intent.getAction().equals(SERVICE_ACTION)) {

mHandler.postDelayed(updateThread, 60*1000);

}

}

}

服务绑定

service android:name="com.seekbar.android.service.MusicService"/


当前名称:android的定时器,安卓间隔定时器
当前链接:http://cxhlcq.com/article/dsehjid.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部