时间:2021-05-20
android中定时有很多种是实现,常见的Handler 与Thread的结合,handler.postDelayed ,以及要使用的AlarmManger 等都可以实现定时任务的执行,但是使用场景却大不相同,这里主要是怎么用AlarmManager实现定时任务。
涉及知识点:
1)BroadCastReceiver任务接收
2)CountDownTimer倒计时
3)AlertDialog 任务提醒
4)AlarmManager 定时任务
这里实现的需求时每天定时24点关机,有设备是定制系统,防止长时间的不关机导致应用的卡顿,在关机时并给用户以提示,如果无操作就自动关机。
第一步是实现简单布局,在布局中写两个Button,一个设置,一个取消
第二步:初始化页面布局及Button
广播主要代码
import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.os.Build;import android.os.CountDownTimer;import android.util.Log;import android.view.WindowManager;import android.widget.Toast;public class AlarmReceiver extends BroadcastReceiver {private String TAG=this.getClass().getSimpleName();public static final String BC_ACTION="com.ex.action.BC_ACTION";private AlertDialog.Builder builder;CountDownTimer timer;@Overridepublic void onReceive(Context context,Intent intent) {String msg=intent.getStringExtra("msg");Log.i(TAG,"get Receiver msg :"+msg);Toast.makeText(context,msg,Toast.LENGTH_LONG).show();showConfirmDialog(context);}private void showConfirmDialog(Context context){builder=newAlertDialog.Builder(context);builder.setTitle("提示").setMessage("将在30秒后关机").setCancelable(false).setPositiveButton("取消",newDialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, intwhich) {if(timer!=null)timer.cancel();}});setShowDialogType(context,builder.create());}private void setShowDialogType(Context context,AlertDialog alertDialog){int type;if(Build.VERSION.SDK_INT>24){type= WindowManager.LayoutParams.TYPE_PHONE;}else if(Build.VERSION.SDK_INT>18){type= WindowManager.LayoutParams.TYPE_TOAST;}else{type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;}alertDialog.getWindow().setType(type);alertDialog.show();//开启倒计时,并设置倒计时时间(秒)startCountDownTimer(context,alertDialog,30);}private void startCountDownTimer(final Context context,final AlertDialog alertDialog,inttime){timer=newCountDownTimer(time*1000,1000) {@Overridepublic void onTick(long millisUntilFinished) {//倒计时提示文字Log.i(TAG,"onTick time :"+millisUntilFinished);alertDialog.setMessage("将在"+(millisUntilFinished/1000)+"关机");}@Overridepublic void onFinish() {//倒计时结束Log.i(TAG,"倒计时结束!");alertDialog.dismiss();//倒计时结束执行定时的任务// shutdown(context);}};timer.start();}//shoutDown需要 系统权限才能执行否则会提示权限异常public void shutDown(Context context) {String action ="android.intent.action.ACTION_REQUEST_SHUTDOWN";String extraName ="android.intent.extra.USER_REQUESTED_SHUTDOWN";Intent intent =newIntent(action);intent.putExtra(extraName, true);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}}在AndroidManifest.xml中声明配置文件中声明:
如实全部代码实现定时任务
弹框需要如下权限:
< uses-permission android:name=”android.permission.SYSTEM_ALERT_WINDOW”/>以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在业务中,我们经常需要基于定时任务来触发来实现各种功能。比如TTL会话管理、锁、定时任务(闹钟)或更复杂的状态切换等等。百纳网主要给大家介绍了关于Golan
定时任务在项目中经常会使用到,本文主要根据博主自己使用定时的经验分如下几点介绍定时任务:1、Quartz定时任务简介及Spring配置Quartz定时任务2、S
记录下Spring自带的定时任务用法。spring中使用定时任务基于xml配置文件使用定时任务首先配置spring开启定时任务
刚刚看了下SpringBoot实现定时任务的文章,感觉还不错。SpringBoot使用Spring自带的Schedule来实现定时任务变得非常简单和方便。在这里
1.定时任务实现方式定时任务实现方式:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方