❶ 一個android Timer,為什麼只執行了一次
通過 timer.schele執行的?那注意參數寫法, timer.schele(task,1000,5000),表示1秒後開始,5秒為周期,循環執行, timer.schele(task,5000),表示5秒後執行一次結束。
❷ android 怎麼實現計時器時分秒的操作
可以Calendar.getInstance().get(Calendar.HOUR),獲取當前時間,然後計算時間差
❸ android 用 service 和 CountDownTimer 實現一個倒計時器的功能
在平時我們編程的時候,經常會用到倒計時這個功能,很多人不知道Android已經幫封裝好了一個類,往往都自己寫。現在發現了這個類,大家共享一下:
在一個TextView不斷顯示剩下的時間,代碼如下:
[java] view plain
private TextView vertifyView;
private CountDownTimer timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
vertifyView.setText((millisUntilFinished / 1000) + "秒後可重發");
}
@Override
public void onFinish() {
vertifyView.setEnabled(true);
vertifyView.setText("獲取驗證碼");
}
};
調用的時候很簡單:timer.start();
最後說明一下:CountDownTimer timer = new CountDownTimer(10000, 1000)中,第一個參數表示總時間,第二個參數表示間隔時間。意思就是每隔一秒會回調一次方法onTick,然後10秒之後會回調onFinish方法。
❹ android 定時器如何讓某天某個時間啟動
Android中使用AlarmManager進行定時操作,現在需要啟動多個定時器,但無論採用哪種方式後面的定時器都會將前面的定時器覆蓋掉(Android系統版本2.1),只啟動最後一個定時器,見代碼 Java code// 方式一for (int i = 0; i < 10; i ++) { ... AlarmManager am = null; am = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE); ... Intent i = new Intent("xxx"); PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); ... am.setRepeating(...);}// 方式二AlarmManager am = null;am = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE);for (int i = 0; i < 10; i ++) { ... Intent i = new Intent("xxx"); PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); ... am.setRepeating(...);} 請問如果要實現啟動多個定時器應該怎麼操作?Android系統的鬧鍾就是採用AlarmManager進行操作的,如何才能啟動多個定時器呢?先謝謝大家了 ------解決方案-------------------- public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags) requestCode 需要是唯一的
❺ 一個android Timer,為什麼只執行了一次
public void getPaisong() {
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1: {
// 初始化搜索模塊,注冊事件監聽
mSearch = new MKSearch();
mSearch.init(app.mBMapMan, new MyMKSearchListener());
jiexi();
cou++;
Toast.makeText(
BMapApiDemoApp.mDemoApp.getApplicationContext(),
"執行了"+cou+"一次!", Toast.LENGTH_LONG).show();
}
break;
}
super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
timer = new Timer(true);
timer.schele(task, 5000); // 延時1000ms後執行,1000ms執行一次
// timer.cancel(); //退出計時器
}
我在oncreate方法里直接調用了getPaisong()方法,可是只顯示cou=1
❻ android定時器的使用
目前在項目中使用過的定時器主要是兩種方式:1.handler的延時任務 2.timer的定時器
下面主要來介紹這兩種方式 定時器的用法,和遇到的坑 :
1.handler的延時任務
寫了一個demo,是關於hanlder發送延時消息和 取消延時消息的
但是在實際運用的過程中,常常會出現無法移除延時消息的問題,這個問題主要是因為兩個runnable的對象不是同一個,
當Activity進入後台運行後再轉入前台運行,removeCallbacks無法將updateThread從message queue中移除。這是為什麼呢?
在Activity由前台轉後台過程中,線程是一直在運行的,但是當Activity轉入前台時會重新定義Runnable runnable;也就是說此時從message queue移除的runnable與原先加入message queue中的runnable並非是同一個對象。 解決方式1:如果把runnable定義為靜態的則removeCallbacks不會失效,對於靜態變數在內存中只有一個拷貝(節省內存),JVM只為靜態分配一次內存,在載入類的過程中完成靜態變數迅洞的內存分配,我們做如下修改就能解決上面的這個問題.
解決方式2:將所有的runnable任務放到一個集合中,根據runnable的id移除相應的任務,即可以解決這個問題
2.timer的延時任務
同樣用上面的demo來說明使用方法:
要注意的是:
TimerTask運行在一個單獨的線程里,而不是UI線程。所以使用 Android timer時,注意android的單線程原則,確保線程安全。不要纖物在TimerTask的run方法中做UI相關的操作,如:TextView.setText()等,這樣可能會導致UI線程阻塞。如果需要可以使用handler向UI線程發消息,具體處理由UI線程自己完成。在使用完Timer之後,要使用Timer的cancel方法取消Timer,否則Timer一直在運行。
這里需要注畝豎枯意的是,timer的cancel方法只能執行一次,不能在調用了cancel之後再進行timer的任務執行。
參考文章:
Android 定時器實現的幾種方式和removeCallbacks失效問題詳解
Android 中Timer和TimeTask完成定時任務