计时器,锁屏广播事件,widget小控件,

48.两种计时器

CountDownTimer是倒计时计时器,接收的参数是:

millisInFuture:倒计时时间

countDownInterval:接收onTick(long)回调的间隔时间


上面例子是一个文本里面显示30秒倒计时。


Timer:计时器

TimerTask:计时器要执行的任务

Timer timer = new Timer();

TimerTask task = new TimerTask(){

@Override

public void run(){

};

timer.schedule(task, delay, period);

第一个参数是执行的任务

第二个参数是第一次执行的时候延迟多久,立刻执行设为0;

第三个参数是每隔多长时间更新一下,单位ms

}

取消计时器

timer.cancel();task.cancel();timer = null; task = null;


49.锁屏广播事件

锁屏的广播事件是一个特殊的广播事件,在清单文件中配置广播接收者是不会生效的,所以只能在代码里面注册

广播接收者的IntentFilter为:ACTION_SCREEN_OFF


50.widget小控件

1.写一个类继承AppWidgetProvider,AppWidgetProvider实际上也是一个广播接收者,所以也需要在清单文件中注册。

复写AppWidgetProvider里的onReceive方法、onUpdate方法、onEnabled方法、onDisabled方法。

只要操作小控件就会产生广播,也就会调用onReceive方法。

onUpdate方法是过一个更新周期时调用此方法。如果用户在设置里面停止服务,此时小控件就不会定时更新了,为了避免这个问题,可以在该方法中写开启定时更新的服务

onEnabled方法是第一次在桌面上添加小控件时调用的方法。可以在该方法中开启定时更新的服务。

onDisabled方法是最后一个小控件被删除时调用的方法。可以在该方法中停止定时更新的服务。

2.在清单文件中注册,并指定小控件的原始数据

计时器,锁屏广播事件,widget小控件,_第1张图片

3.创建小控件的原始数据,小控件的原始数据文件要放到res目录下的xml文件夹中:

计时器,锁屏广播事件,widget小控件,_第2张图片

上面的参数分别是:

小控件的最小宽度、最小高度更新周期(单位是毫秒,最小值是30分钟,小于最小值时默认都是30分钟)、添加前widget的预览图片(如果不写,默认用应用程序的图标)、小控件初始布局、后面4个参数都可删除。

为了解决更新周期长的问题,可以自己写代码更新小控件。写到一个服务里面,利用Timer、TimerTask更新

public void onCreate() {
	awm = AppWidgetManager.getInstance(this);
	timer = new Timer();
	task = new TimerTask() {

		@Override
		public void run() {
			// 设置更新的组件
			ComponentName provider = new ComponentName(
					UpdateWidgetService.this, MyWidget.class);
			RemoteViews views = new RemoteViews(getPackageName(),
					R.layout.process_widget);
			views.setTextViewText(R.id.process_count,"正在运行的进程:"+ SystemInfoUtils.getRunningProcessCount(getApplicationContext())+ "个");
			long availMem = SystemInfoUtils.getAvailMem(getApplicationContext());
			String size = Formatter.formatFileSize(getApplicationContext(),availMem);
			views.setTextViewText(R.id.process_memory, "可用内存:" + size);
			// 描述一个动作,这个动作是由另外一个应用程序执行的。
			// 自定义一个广播,杀死后台进程的事件
			Intent intent = new Intent("com.uc.mobilesafe.killall");
			// 通过延期意图发送自定义广播
			PendingIntent pendingIntent = PendingIntent.getBroadcast(
					getApplicationContext(), 0, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);
			views.setOnClickPendingIntent(R.id.btn_clear, pendingIntent);
			awm.updateAppWidget(provider, views);
		}
	};
	timer.schedule(task, 0, 3000);
	super.onCreate();
}

4. 创建小控件的布局文件

你可能感兴趣的:(计时器,锁屏广播事件,widget小控件,)