日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android實現定時任務功能_Android

作者:最萌小熊貓 ? 更新時間: 2022-03-30 編程語言

本文實例為大家分享了Android實現定時任務功能的具體代碼,供大家參考,具體內容如下

1、采用Handle與線程的sleep(long)方法

(1)、定義一個Handler類,用于處理接受到的Message。

Handler handler = new Handler() { ?
? ? public void handleMessage(Message msg) { ?
? ? ? ? // 要做的事情 ?
? ? ? ? super.handleMessage(msg); ?
? ? } ?
}; 

(2)、新建一個實現Runnable接口的線程類,如下:

public class MyThread implements Runnable { ?
? ? @Override ?
? ? public void run() { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? while (true) { ?
? ? ? ? ? ? try { ?
? ? ? ? ? ? ? ? Thread.sleep(10000);// 線程暫停10秒,單位毫秒 ?
? ? ? ? ? ? ? ? Message message = new Message(); ?
? ? ? ? ? ? ? ? message.what = 1; ?
? ? ? ? ? ? ? ? handler.sendMessage(message);// 發送消息 ?
? ? ? ? ? ? } catch (InterruptedException e) { ?
? ? ? ? ? ? ? ? // TODO Auto-generated catch block ?
? ? ? ? ? ? ? ? e.printStackTrace(); ?
? ? ? ? ? ? } ?
? ? ? ? } ?
? ? } ?
}

(3)、在需要啟動線程的地方加入下面語句:

new Thread(new MyThread()).start(); ?

2、采用Handler的postDelayed(Runnable, long)方法

(1)、定義一個Handler類

Handler handler=new Handler(); ?
?
Runnable runnable=new Runnable() { ?
? ? @Override ?
? ? public void run() { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? //要做的事情 ?
? ? ? ? handler.postDelayed(this, 2000); ?
? ? } ?
}; 

(2)、啟動

handler.postDelayed(runnable, 2000);

3、用Handler與timer及TimerTask結合的方法

(1)、定義定時器、定時器任務及Handler句柄

private final Timer timer = new Timer(); ?
private TimerTask task; ?
Handler handler = new Handler() { ?
? ? @Override ?
? ? public void handleMessage(Message msg) { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? // 要做的事情 ?
? ? ? ? super.handleMessage(msg); ?
? ? } ?
}; 

(2)、初始化計時器任務

task = new TimerTask() { ?
? ? @Override ?
? ? public void run() { ?
? ? ? ? // TODO Auto-generated method stub ?
? ? ? ? Message message = new Message(); ?
? ? ? ? message.what = 1; ?
? ? ? ? handler.sendMessage(message); ?
? ? } ?
}; 

(3)、啟動和關閉定時器

timer.schedule(task, 2000, 3000); ??
timer.cancel(); 

4、采用AlarmManger實現長期精確的定時任務

(1)、服務類:

public class HorizonService extends Service {
? ? @Override
? ? public IBinder onBind(Intent intent) {
? ? ? ? return null;
? ? }
? ? @Override
? ? public int onStartCommand(Intent intent, int flags, int startId) {
? ? ? ? new Thread(new Runnable() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? Log.d("TAG", "打印時間: " + new Date().
? ? ? ? ? ? ? ? ? ? ? ? toString());
? ? ? ? ? ? }
? ? ? ? }).start();
? ? ? ? AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
? ? ? ? int five = 5000; // 這是5s
? ? ? ? long triggerAtTime = SystemClock.elapsedRealtime() + five;
? ? ? ? Intent i = new Intent(this, AlarmReceiver.class);
? ? ? ? PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
? ? ? ? manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
? ? ? ? return super.onStartCommand(intent, flags, startId);
? ? }
}

(2)、廣播接受器

public class AlarmReceiver extends BroadcastReceiver {
? ? @Override
? ? public void onReceive(Context context, Intent intent) {
? ? ? ? Intent i = new Intent(context, HorizonService.class);
? ? ? ? context.startService(i);
? ? }
}

(3)、啟動定時任務:

Intent intent = new Intent(this,HorizonService.class);
startService(intent);

原文鏈接:https://blog.csdn.net/weixin_42600398/article/details/104325308

欄目分類
最近更新