① 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完成定時任務
② android AlarmManager使用詳解
AlarmManager是android中系統自帶的一個提醒服務,比如設置鬧鍾,做一個定時任務,還可以設置重復操作
AlarmManager中常用的有三個方法:
1、set(int type,long startTime,PendingIntent pi),用於設置一次鬧鍾。
2、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用於設置重復鬧鍾。
3、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),同樣是用於設置重復鬧鍾,但是它是不準確的,相對於第二個方法,也更加節能。
下面就看看這些方法中的參數:
type為鬧鍾的類型,可分為四個常量:
ELAPSED_REALTIME:鬧鍾在睡眠狀態下不可用,使用的是相對系統啟動時間。
ELAPSED_REALTIME_WAKEUP:鬧鍾在睡眠狀態下可用,使用的是相對系統啟動時間。
RTC:鬧鍾在睡眠狀態下不可用,使用的是真實時間。
RTC_WAKEUP:鬧鍾在睡眠狀態下可用,使用的是真實時間。
startTime:為開始時間
intervalTime:為重復鬧鍾的間隔時間,內置了幾種:
INTERVAL_FIFTEEN_MINUTES 15分鍾
INTERVAL_HALF_HOUR 半個小時
INTERVAL_HOUR 一個小時
INTERVAL_HALF_DAY 半天
INTERVAL_DAY 一天
PendingIntent :廣播的一個intent,我們用廣播接受鬧鍾的定時任務,注冊一個廣播去接受,任務指令。
使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法可以得到一個發送廣播動作的PendingIntent對象
為以下4個常量或其他支持使用Intent.fillIn()來控制它的變數:
FLAG_CANCEL_CURRENT:如果描述的PendingIntent對象已經存在時,會先取消當前的PendingIntent對象再生成新的。
FLAG_NO_CREATE:如果描述的PendingIntent對象不存在,它會返回null而不是去創建它。
FLAG_ONE_SHOT:創建的PendingIntent對象只使用一次。
FLAG_UPDATE_CURRENT:如果描述的PendingIntent對象存在,則保留它,並將新的PendingIntent對象的數據替換進去。
另一個就是在manifest.xml中注冊自己的廣播
這樣就可以實現定時任務了,如果要定時任務service啟動還可以加上service
③ Android 後台定時任務有幾種實現方式
123456789ignore_user_abort();//關掉瀏覽器,PHP腳枝鎮本也可以繼續執行.<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight"纖手>set_time_limit</a>(0);// 通過<a href="/s?wd=set_time_limit&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">set_time_limit</a>(0)可以讓程序無限制的執行下去$interval=60*30;// 每隔半小時運行do{ //ToDo sleep($interval);// 等待5分鍾}while(true); 簡單直接不毀搭嫌顧後果型
④ android怎麼實現定時的操作
有時候我們會遇到定時打開某些應用的這樣一種需求。
比如最近我在使用讀者 Android版的應用的時候,每次打開應用,應用發送一定的聯網請求之後就可以給我的賬號增加一定的積分,連續登錄的次數越多,積分獎勵越多。而一旦有一天沒有登錄,積分獎勵又從最初的值開始。
為了避免某一天忘記打開應用或者應用打開後聯網需要等待一段時間,可以通過定時達人這款手機應用定時地打開其它應用。
工具/原料
Android手機(我手機目前系統版本是4.2.2)
定時達人(TimeDo)
讀者 Android應用
方法/步驟
在手機上安裝定時達人軟體
定時達人有自己的網站,相關應用在各大應用商城也有。可以通過apk進行安裝,可以從應用商店下載安裝。我是從散配google play上下載安裝的。
添加新任務
設置任務困隱——設置時間
設置任務——給任務取個名字
設置任務——添加新任務
選擇運行程序一欄
設置任務——選擇定時打開的應用程序
點擊應用程序,選擇讀者。
保存設置
這汪掘廳里需要點兩次保存,之後就回到了定時達人主頁面。
通過立即執行進行測試設置效果
單擊定時打開讀者一欄,在彈出下拉框中選擇立即執行來立即執行任務。在設置正確的情況下讀者應用被打開,通知欄會有相應通知提示。
在之前的設置步驟中,保持了默認的循環方式,即周循環,一周的每一天都選中。按照設置,每一天的指定時間都可以自動打開相應應用。
⑤ android怎麼實現定時任務
import javax.swing.*;
import java.awt.*;
public class Problem extends JFrame{
//公用
ImageIcon proII;
JLabel proJL;
JPanel proJP;
JPanel proJP1_1;
JLabel proJL1_1;
JRadioButton projrb1_1,projrb1_2,projrb1_3;
ButtonGroup proBG1_1;
JButton proJB1_1;