Android规划周期任务
问题:应用总要周期性的执行某项任务,例如检查服务器上的更新或者提醒用户做某些事情。
解决方案:用AlarmManager来管理和执行任务。AlarmManager可用于计划未来的单次或重复操作,甚至在应用没有运行时也可以执行任务。
AlarmManager通过发出PendingIntent来发出警告触发时执行各种系统的组件,例如Activity、Broadcast、Receiver、Service。
编写被触发的BroadcastReceiver
import java.text.SimpleDateFormat;
import java.util.Calendar; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//可以执行一个有趣的操作,我们这里只是显示当前时间
Calendar now = Calendar.getInstance();
java.text.DateFormat formatter = SimpleDateFormat.getTimeInstance();
Toast.makeText(context, formatter.format(now.getTime()), 100).show(); }
}
BroadcastReceiver必须在Manifest文件中用<receiver>标签声明,否则AlarmManager就无法将其触发。
<receiver android:name=".AlarmReceiver"></receiver>
设置和取消提醒是通过PendingIntent实现的。我们创建一个直接指向应用的BroadcastReceiver的Intent,然后用getBroadcast()(因为我们创建了指向BroadcastReceiver的引用)从中创建一个PendingIntent。
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private PendingIntent mAlarmIntent; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//为两个按钮附加监听器
findViewById(R.id.start).setOnClickListener(this);
findViewById(R.id.stop).setOnClickListener(this);
//创建提醒触发器
Intent launchIntent = new Intent(this, AlarmReceiver.class);
mAlarmIntent = PendingIntent.getBroadcast(this, 0, launchIntent, 0);
} @Override
public void onClick(View view) {
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
long interval = 5*1000;
switch (view.getId()) {
case R.id.start:
Toast.makeText(this, "Scheduled", 100).show();
//ELAPSED_REALTIME根据时间触发提醒,如果设备处于休眠状态,会将设备激活。
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+interval, interval, mAlarmIntent);
break;
case R.id.stop:
Toast.makeText(this, "Canceled", 100).show();
manager.cancel(mAlarmIntent);
break;
default:
break;
}
}
}
Android规划周期任务的更多相关文章
- android 生命周期
引入android生命周期概念来做前端的hash切换页面的思路: 1. page manager来管理多个page(一对多的关系); 2. route:URL <-> Page; 3. P ...
- Android生命周期和Service生命周期
android生命周期 运行:oncreate → onstart → onresume暂停:onresume → onpause:再次运行:onresume停止:onpause → onstop → ...
- Android生命周期里你也许不知道的事
Android生命周期预计连刚開始学习的人都再熟悉只是的东西了,但这里我抛出几个问题.也许大家曾经没有想过或者可能认识的有些错误. 一.当A启动B时,A和B生命周期方法运行的先后顺序是如何的?当按返回 ...
- Android生命周期
Android的生命周期如下图所示: A和B两个Activity,从A启动B活动.执行的方法: A活动 onCreate() onStart() onResume() ...
- Android生命周期详细说明
提供两个关于Activity的生命周期模型图示帮助理解: 图1 图2 从图2所示的Activity生命周期不难看出, ...
- Android 生命周期 和 onWindowFocusChanged
转载 http://blog.csdn.net/pi9nc/article/details/9237031 onWindowFocusChanged重要作用 Activity生命周期中,onStart ...
- Android生命周期注意事项
生命周期图解 以下英文引用全部来自google官方文档说明,方便理解. onCreate (Bundle savedInstan ...
- Android生命周期回顾
先回顾生命周期 Activity一共有3中状态 运行中 Activity位于前台,并具有用户焦点 暂停 另一个Activity位于屏幕前台并具有用户焦点,但此Activity仍可见.也就是说,另一个A ...
- Android生命周期例子小解
Activity 从创建到进入运行态所触发的事件 onCreate()-->onStart-->onResume() 从运行态到停止态所触发的事件 onPa ...
随机推荐
- alpha七天冲刺计划
alpha七天冲刺计划(更新ing) 第一天:https://www.cnblogs.com/renluqian/p/9895895.html 第二天: 第三天: 第四天: 第五天: 第六天: 第七天 ...
- SSH密钥登陆
参考: SSH公钥登录原理 比如git可以生成公钥,然后用有权限的账户把他加到仓库上,以后就可以通过公钥登陆了.不需要像https那样需要有账号,但是权限管理就不细了. 有时候如果仓库上添加了多个公钥 ...
- java 统计字符串中子字符串个数
方法一: public class StatisticalStringNumber1 { public static void main(String args[]){ String string=& ...
- python3.7.0安装
如何安装Python的操作步骤: 1.第一步先去python的官方网站下载python的安装包 地址:https://www.python.org/downloads/ 根据自己的系统选择对应的安装包 ...
- Unit Vector Compression
Recently, I compared a few methods for compressing generic unit vectors. The method used in Cry Engi ...
- jquery中的正则表达式
1.什么是正则表达式: 能让计算机读懂的字符串匹配规则. 2.正则表达式的写法: var re=new RegExp('规则', '可选参数');var re=/规则/修饰参数; 3.规则中的字符 1 ...
- 案例1-合并2个不同文件夹中的csv文件到另外一个目录,相同的文件名进行数据合并,不同的文件名直接移到新文件夹
发现在ubuntu和centos中有些命令还不一样,比如<<<可在centos中使用,但是ubuntu中不行 csv文件名以及格式如下 3669_20180121.csv 总笔数,2 ...
- nginx负载均衡监测节点状态
1. 安装nginx_upstream_check_module模块 我的实验环境是在/root 和 /application目录下都编译安装了nginx-1.6.3,然后在/root目录下建立一个文 ...
- iOS开发之动画中的时间(概况)
一.引言 在iOS开发中使用动画时,可以通过设置动画的duration.speed.begintime.offset属性,来设置动画的时长.速度.起始时间及起始偏移. 用一个简单的例子来说明各个参数的 ...
- MySQL:管理MySQL、事务(三)
干货: 命令行程序mysql实际上是MySQL客户端,真正的MySQL服务器程序是mysqld,在后台运行. 数据库事务具有ACID特性,用来保证多条SQL的全部执行. 五.MySQL 通过mysql ...