Android定时的基本实现

Android定时的基本实现,第1张

在Android中大概又两种实现方式:一种是java中的Timer类,一种是Android中的Alerm机制。两者功能差不多。

Alerm具有cup运行锁,而Timer不具有cpu锁。

每种手机都具有自己的休眠策略,当长时间不是手机的情况下,cpu就会进入休眠状态。在这种情况下Timer将无法工作。而Alerm具有cpu锁,将会导致cpu无法休眠。

AlarmManager  manger=(AlarManger)getSystemService(ContextALARM_SERVICE);

mangerset(int flag,long time,PendingIntent  pendingIntent);

set方法参数说明:

第一个参数flag为工作类型:

AlarmManger ELAPSED_REALTIME:让定时时间从开机算起时间算起,但不会唤醒cpu。

AlarmMangerELAPSED_REALTIME_WAKEUP:同样表示让定时时间从开机算起,但会唤醒                                                                               CPU。

RTC:表示让定时任务从1970年1月1日算起,但是不唤醒cpu。

RTC_WAKEUP:表示让定时任务从1970年1月1日算起,但是唤醒cpu。

提示:SystemClockelapsedReadtime()---获取系统开机至今所经历的毫秒数;

           SystemcurrentTimeMillis()-------方法获取1970年1月1日至今天的毫秒数;

第二个参数: 延时的时间,单位毫秒;

第三个参数: PendingIntent指定具体动作;

注意:Android44版本后set方法触发不准确,有可能会延时一段时间执行(这不是Bug,是电池性能优化,系统会检测目前有多少个Alarm任务存在,然后将触发相近的几个任务一起执行)

如果要精确执行,将 setExact() 方法代替set()方法。

cancel ( PendingIntent   operation )

方法将会取消Intent匹配的任何闹钟。

setRepeating(int type,long triggerAtTime,long interval,PendingIntent operation);

参数说明:interval重复时间间隔;(44后触发不准时)

AlarmManger的其它功能:

设置系统时间和时区

添加权限:androidpermissionSET_TIME;

通过setTime(long millis)方法设置系统时间;

需要添加androidpermissionSET_TIME_ZONE权限。

通过setTimeZone(String tz)方法设置时区;

计算的下载速度,举例说明一下吧。

例如每隔N秒就改变当前下载速度数字的,N秒前的下载进度百分比m%,

N秒后的下载进度百分比n%,当前下载问题的总大小Size换算成多少kb

(m%-n%)Size/N就是 这段时间的下载或上传速度了。

注意:记得增加判断一些边界问题。

public class XuanfuTestActivity extends Activity {

/ Called when the activity is first created /

int num=10;

String text;

Button button;

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

button=new Button(getApplicationContext());//这里不能写this 否则没有效果

WindowManager wmManager=(WindowManager)getApplicationContext() getSystemService(ContextWINDOW_SERVICE);

WindowManagerLayoutParams params=new WindowManagerLayoutParams();

paramstype=WindowManagerLayoutParamsTYPE_PHONE ;

paramstype=2002;

paramsflags=40;

paramswidth=50;

paramsheight=50;

wmManageraddView(button, params);

handlersendEmptyMessageDelayed(1, 1000);

}

Handler handler=new Handler(){

public void handleMessage(androidosMessage msg) {

if (msgwhat==1) {

text=""+num--;

buttonsetText(text);

}

if (num<=0) {

num=0;

}else {

handlersendEmptyMessageDelayed(1, 1000);

}

};

};

}

Android获取当前时间代码

//需要引用的

import javasqlTimestamp;

import javatextSimpleDateFormat;

//详细代码

javautilDate currentdate = new javautilDate();//当前时间

//long i = (currentdategetTime()/1000-timestamp)/(60);

//Systemoutprintln(currentdategetTime());

//Systemoutprintln(i);

Timestamp now = new Timestamp(SystemcurrentTimeMillis());//获取系统当前时间

Systemoutprintln("now-->"+now);//返回结果精确到毫秒。

时间戳转日期

int timestamp = 1310457552; //将这个时间戳转为日期

return getTime(timestamp);

定义getTime, getDate, IntToLong

public static String getTime(int timestamp){

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String time= null;

try {

String str = sdfformat(new Timestamp(IntToLong(timestamp)));

time = strsubstring(11, 16);

String month = strsubstring(5, 7);

String day = strsubstring(8,10 );

time =getDate(month, day)+ time;

} catch (Exception e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return time;

}

public static String getDate(String month,String day){

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制

javautilDate d = new javautilDate(); ;

String str = sdfformat(d);

String nowmonth = strsubstring(5, 7);

String nowday = strsubstring(8,10 );

String result = null;

int temp = IntegerparseInt(nowday)-IntegerparseInt(day);

switch (temp) {

case 0:

result="今天";

break;

case 1:

result = "昨天";

break;

case 2:

result = "前天";

break;

default:

StringBuilder sb = new StringBuilder();

sbappend(IntegerparseInt(month)+"月");

sbappend(IntegerparseInt(day)+"日");

result = sbtoString();

break;

}

return result;

}

//java Timestamp构造函数需传入Long型

public static long IntToLong(int i){

long result = (long)i;

result=1000;

return result;

}

以上就是关于Android定时的基本实现全部的内容,包括:Android定时的基本实现、android怎么计算每秒钟的上传和下载速度、怎么在android悬浮窗口上实现倒计时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9450043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存