Android定时服务
来源:互联网 发布:软件需求变更 编辑:程序博客网 时间:2024/05/22 03:51
原文:Android实现一个定时器,类似闹钟功能,并且监听时间的变化数字显示
实现一个定时器需要了解Android的Service和BroadcastReceiver。 Service是为了让定时器在后台可以运行,BroadcastReceiver是为了监听定时器发送时间变化的广播。话不多说,看代码吧。
TimingService (定时服务)
public class TimingService extends Service { private TimingReceiver mReceiver; private Timer mTimingReceiver ; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } @Override public void onCreate() { super.onCreate(); mTimingReceiver = new TimingReceiver(); mTimer = new Timer(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { IntentFilter filter = new IntentFilter(); filter.addAction("com.XX.timing");//添加定时 registerReceiver(mTimingReceiver, filter); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mTimingReceiver); } private class TimingReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final long duration = intent.getLongExtra("duration", 0); //定时时间 final long timeCurrent = System.currentTimeMillis(); //接收到广播的时间 mTimer.cancel(); if (duration > 0) { mTimer = new Timer(); //定时器 mTimer.schedule(new TimerTask() { @Override public void run() { Intent intent = new Intent(); intent.setAction("com.XX.timing.finish");//自己定义的action 结束定时 sendBroadcast(intent); } }, duration); mTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { Log.e("TimingService", getStandardTime( duration-System.currentTimeMillis()+timeCurrent); //可以在log中看到时间的变化 } }, 0 , 60*1000); } } } public String getStandardTime(long timestamp) { SimpleDateFormat sdf; if (timestamp > 60*60*1000) { sdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); } else { sdf = new SimpleDateFormat("mm:ss", Locale.getDefault()); } sdf.setTimeZone(TimeZone.getTimeZone("GMT+0")); Log.e("timestamp",timestamp + ""); Date date = new Date(timestamp+1000); sdf.format(date); return sdf.format(date); }}
开启服务
Intent intent = new Intent(MainActivity.this, TimingService.class);startService(intent);
在其他页面接收广播
//监听开始广播IntentFilter timeFilter = new IntentFilter();timeFilter.addAction("com.xx.timing");registerReceiver(receiver, timeFilter);//监听结束广播IntentFilter timeFilter = new IntentFilter();timeFilter.addAction("com.xx.timing。finish");registerReceiver(receiver, timeFilter);private class TimingReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //这里可以通过判断action的不同来判断是开始还是结束 }}
0 0
- Android 定时服务
- Android定时服务
- Android定时服务
- Android中使用定时服务
- Android系统定时服务AlarmManager
- Android定时广播和定时服务两种实现方式
- Android定时广播和定时服务两种实现方式
- android定时服务实现的相关开源包
- android之使用AlarmManager开启定时服务
- AlarmManager 定时广播,定时服务
- Android AlarmManager实现不间断轮询服务(定时提醒功能)
- android 定时上传服务及异步任务AsyncTask
- 开发定时计算机服务
- 定时开关FTP服务
- linux crontab 定时服务
- EJB 定时服务实现
- window Timers 定时服务
- 定时任务服务
- Routable-iOS
- log4j使用教程详解(怎么使用log4j2)
- 我的职场路
- 两个引用的库v4包冲突
- 第1周 项目(A)-9如何购买玫瑰?
- Android定时服务
- 自定义下拉刷新ListView
- android Matrix
- QProcess的应用:杀死固定进程并重启进程
- Centos 系统时间与当前时间相差和时区解决办法
- iOS锁屏问题解决方式
- 使用 GDB 调试 Linux 软件
- 进程间通讯总结 (6)
- 多target设置实战,自己也这么搞过,这篇写的蛮细的,mark一下吧。