当前位置: 首页 > news >正文

网站备案号怎么查中国设计网址

网站备案号怎么查,中国设计网址,网站开发集,单页面的网站模板总结了以下六种常用的Android延时执行策略,以此记录: 1、TimerTask 2、Handler.postDelayed 3、Handler.sendEnptyMessageDelayeed 4、Thread.sleep线程休眠-需要在子线程 5、使用AlarmManager-全局定时器或者闹钟 6、Wait 首先定义一个时间常量&…

总结了以下六种常用的Android延时执行策略,以此记录:

1、TimerTask

2、Handler.postDelayed

3、Handler.sendEnptyMessageDelayeed

4、Thread.sleep线程休眠-需要在子线程

5、使用AlarmManager-定时器或者闹钟

6、Wait

首先定义一个时间常量:

public static final long DELAYTIME = 2000L;

1、TimerTask

TimerTask mTimerTask = new TimerTask() {@Overridepublic void run() {Log.e(TAG, "TimerTask -run:");}};
//timer可以复用,timerTask不可复用,否则闪退
if (mTimer ==null){mTimer = new Timer();
}
mTimer.schedule(mTimerTask,DELAYTIME);Handler.postDelayed
handler.postDelayed(new Runnable() {@Overridepublic void run() {Log.e(TAG, "handler.postDelayed :");}
},DELAYTIME);

注意:以上用法timer可以复用,timerTask不可复用。

第二种和第三中都依赖Handler,先定义一个handler

public static class MyHandler extends Handler{private final WeakReference<Activity> activityWeak;public MyHandler(Activity activity){activityWeak = new WeakReference<>(activity);}@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);TimerActivity activity = (TimerActivity) activityWeak.get();switch (msg.what){case TimerActivity.MESSAGE1:Log.e(TAG, "handleMessage: what="+msg.what );break;default:Log.e(TAG, "handleMessage:      default      -what="+msg.what );break;}}
}

2、Handler.postDelayed

handler.postDelayed(new Runnable() {@Overridepublic void run() {Log.e(TAG, "handler.postDelayed :");}
},DELAYTIME);

3、Handler.sendEnptyMessageDelayeed

Log.e(TAG, "handler.sendEmptyMessageAtTime :start");
handler.sendEmptyMessageDelayed(MESSAGE1,DELAYTIME);
Log.e(TAG, "handler.sendEmptyMessageAtTime :");

4、Thread.sleep线程休眠-需要在子线程,sleep是线程的方法,他休眠中不会释放锁

Log.e(TAG, "Thread.sleep:  onClick" );
Object lock = new Object();
new Thread() {@Overridepublic void run() {super.run();try {synchronized (lock){Log.e(TAG, "Thread.sleep:  子线程start" );Thread.sleep(20000);Log.e(TAG, "Thread.sleep:  子线程end" );}} catch (InterruptedException e) {e.printStackTrace();}}
}.start();
try {Log.e(TAG, "Thread.sleep:  onClick-1" );Thread.sleep(200);//此行代码影响甚大,需灵活注释,
虽然上面new Thread耗时很短,但是也是有一定开销足以让它在主线程顺序之后执行Log.e(TAG, "Thread.sleep:  主线程执行-准备获取锁" );synchronized (lock){Log.e(TAG, "Thread.sleep:  主线程已获得锁" );}Log.e(TAG, "Thread.sleep:  主线程已释放锁锁" );
} catch (InterruptedException e) {e.printStackTrace();
}

主线程没有200毫秒延时也就是注释Thread.sleep(200)就会先执行主线程然后进入子线程,虽然上面new Thread耗时很短,但是也是有一定开销足以让它在主线程顺序之后执行,以上代码测试发现从new Thread到子线程内第一行代码执行耗时不足1毫秒。以下是运行日志:
2023-12-11 15:12:26.944 18617-18617/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  onClick
2023-12-11 15:12:26.945 18617-18617/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  onClick-1
2023-12-11 15:12:26.945 18617-18617/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  主线程执行-准备获取锁
2023-12-11 15:12:26.946 18617-18617/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  主线程已获得锁
2023-12-11 15:12:26.946 18617-18919/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  子线程start
2023-12-11 15:12:46.947 18617-18919/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  子线程end

======================================

 主线程有200毫秒延时也就是不注释Thread.sleep(200),就会先进入子线程执行完

然后进入主线程。以下是运行日志:
2023-12-11 15:09:40.785 17990-17990/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  onClick
 2023-12-11 15:09:40.786 17990-17990/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  onClick-1
 2023-12-11 15:09:40.786 17990-18231/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  子线程start
 2023-12-11 15:09:40.987 17990-17990/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  主线程执行-准备获取锁
 2023-12-11 15:10:00.787 17990-18231/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  子线程end
 2023-12-11 15:10:00.787 17990-17990/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.sleep:  主线程已获得锁

5、使用AlarmManager-定时器或者闹钟。适用一直在后台运行的定时任务,此处放在一个service执行

Intent intent = new Intent();
intent.setAction("short");
ComponentName component = new ComponentName(TimerActivity.this, MyReceiver.class);
intent.setComponent(component);
//这里除了启动广播也可以换成启动Activity和service
PendingIntent sender = PendingIntent.getBroadcast(TimerActivity.this,0,intent,0);Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND,5);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),sender);

6、Wait-必须使用synchronized,他是Object的方法,他休眠会释放锁

 Object lock = new Object();new Thread(){@Overridepublic void run() {super.run();try {
//                            synchronized (lock){  //没有synchronized锁就会报错:java.lang.IllegalMonitorStateException: object not locked by thread before wait()Log.e(TAG, "Thread.wait:  start" );//以下两行需灵活注释lock.wait(2000);
//                                Thread.sleep(2000);Log.e(TAG, "Thread.wait:  end" );
//                            }} catch (Exception e) {e.printStackTrace();}Log.e(TAG, "Thread.wait:  子线程第二条" );}}.start();try {Thread.sleep(200);Log.e(TAG, "Thread.wait:  主线程开始获取锁" );synchronized (lock){Log.e(TAG, "Thread.wait:  主线程已获得锁" );}} catch (InterruptedException e) {e.printStackTrace();}

lock.wait(2000)放开,Thread.sleep(2000)注释,日志如下:
2023-12-11 14:21:34.371 9385-9748/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  start
2023-12-11 14:21:34.571 9385-9385/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  主线程开始获取锁
2023-12-11 14:21:34.571 9385-9385/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  主线程已获得锁
2023-12-11 14:21:36.372 9385-9748/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  end
2023-12-11 14:21:36.372 9385-9748/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  子线程第二条

Thread.sleep(2000)放开,lock.wait(2000)注释,日志如下:

sleep是线程的方法,他休眠中不会释放锁
2023-12-11 14:24:27.519 10346-10750/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  start
2023-12-11 14:24:27.719 10346-10346/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  主线程开始获取锁
2023-12-11 14:24:29.520 10346-10750/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  end
2023-12-11 14:24:29.520 10346-10750/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  子线程第二条
2023-12-11 14:24:29.520 10346-10346/com.example.testdemo3 E/com.example.testdemo3.activity.TimerActivity: Thread.wait:  主线程已获得锁

http://www.yayakq.cn/news/982715/

相关文章:

  • 做男装海报的素材网站最新网页游戏开服表
  • 安阳专业做网站公司自己的网站做怎样的优化调整
  • 网站建设杭州缘择低价太原做网站价格
  • 企商网站建设手机微信网站怎么做的好
  • 丫个网站建设wordpress iphoto
  • 网站开发技术课程设计报告网站建设表的设计
  • 重庆网站建设是什么如何让自己做的网站让别人看到
  • 旅行网站系统南宁快速优化排名
  • 成都网站设计优秀柚v米科技优化合作平台
  • 做外贸哪个网站可以接单网站建设需要多少钱
  • 网上做论文的网站有哪些内容网站建设 经验
  • 电商网站项目经验介绍ppt模板在线葡京在线葡京
  • 重庆智能网站建设设计iis怎么搭建asp网站
  • 网站开发制作的流程是什么有哪些网站交互效果做的好的
  • 做视频网站要什么软件下载物流网络结构模式有哪些
  • 做网站找哪家公司好wordpress原生评论
  • 买服务器做网站 镜像选什么wordpress用户搜索次数插件
  • 网站开发费属于什么费用个人网站包括哪些内容
  • 佛山外贸网站建设流程商丘网
  • 网站建设方案模版怎样做招嫖网站
  • 基于html5的网站建设论文邯郸全网推广
  • 企业公司建网站的步骤镇江久一信息科技
  • 建筑智库免费网站百度下载老版本
  • 网络营销经典失败案例湛江网站推广优化
  • 荼叶公司网站模板网站建设外包行业
  • 网站开发都需要学什么wordpress优化加速
  • 专业做面膜的网站童装网站建设
  • 深圳网站建设网页制作网络推广营销工具
  • 做360手机网站快速排名软件网站营销培训
  • 专业的河南网站建设价格南通免费建设网站