在Android日常開發(fā)中我們經(jīng)常會(huì)有延時(shí)執(zhí)行某個(gè)操作的需求,例如我們啟動(dòng)應(yīng)用的時(shí)候,開始呈現(xiàn)一個(gè)引導(dǎo)頁面,過了兩三秒后,自動(dòng)跳轉(zhuǎn)到主界面;又如為了控制時(shí)序,需要延時(shí)執(zhí)行等等。
下面整理下實(shí)現(xiàn)延時(shí)執(zhí)行操作的幾種方法:
① 使用Handler的postDelayed方法實(shí)現(xiàn)延時(shí)操作
推薦使用這種方式文章來源:http://www.zghlxwxcb.cn/news/detail-509193.html
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
/**
*要執(zhí)行的操作
*/
}
}, 3000);//3秒后執(zhí)行Runnable中的run方法
new Handler().postDelayed(new Runnable() {
public void run() {
//要執(zhí)行的任務(wù)
}}, 3000);
final int MSG_WHAT = 1;
Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
switch(message.what) {
case MSG_WHAT:
// 更新UI
break;
}
}
};
// 延時(shí)3s執(zhí)行MSG_WHAT
handler.sendEmptyMessageDelayed(MSG_WHAT, 3000);
② 使用線程的休眠實(shí)現(xiàn)延時(shí)操作
new Thread() {
@Override
public void run() {
super.run();
Thread.sleep(3000);//休眠3秒
/**
* 要執(zhí)行的操作
*/
}
}.start();
③ 使用Timer定時(shí)器
TimerTask task = new TimerTask() {
@Override
public void run() {
// 要執(zhí)行的操作
}
};
Timer timer = new Timer();
timer.schedule(task, 3000); // 延時(shí)3s 執(zhí)行TimeTask的run方法
timer.schedule(task,3000,5000);//3秒后每隔5秒執(zhí)行一次
timer.cancel();//銷毀
④ AlarmManager.setRepeating()
適合需要一直在后臺(tái)運(yùn)行的定時(shí)任務(wù),比如每隔5分鐘就做一件事。文章來源地址http://www.zghlxwxcb.cn/news/detail-509193.html
/**
* 一個(gè)定時(shí)任務(wù)
*/
public class AlarmService extends Service {
private static final int INTERVAL = 1 * 60 * 60 * 1000;//1小時(shí)
private static final int PENDING_REQUEST = 0;
/**
* 調(diào)用Service都會(huì)執(zhí)行到該方法
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//通過AlarmManager定時(shí)啟動(dòng)廣播
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
long triggerAtTime = SystemClock.elapsedRealtime() + INTERVAL;//從開機(jī)到現(xiàn)在的毫秒(手機(jī)睡眠(sleep)的時(shí)間也包括在內(nèi)
Intent i = new Intent(this, AlarmReceive.class);
PendingIntent pIntent = PendingIntent.getBroadcast(this, PENDING_REQUEST, i, PENDING_REQUEST);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pIntent);
return super.onStartCommand(intent, flags, startId);
}
}
public class AlarmReceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AlarmService.class);
context.startService(i);
}
}
到了這里,關(guān)于【Android】之【延時(shí)執(zhí)行的幾種方法】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!