使用AlarmManager实现定时功能
2015-03-31 17:05
387 查看
我们经常会需要一些定时的服务,就是在某个时刻执行一定的任务,第一反应就是建立一条延时线程
new Handler().postAtTime(r, uptimeMillis);
这样开辟了一条线程,可能在某个时刻系统资源紧缺的情况下清理掉了,即使没有被清理,也可能会因为内存吃紧等情况下回收掉该线程。那么怎么实现定时操作,第一反应是安卓操作系统实现闹钟的功能,那么我们可以尝试从闹钟功能方面进行入手,看有没有相关的接口,在安卓方便,比回调接口更为被动发动的技能就是广播了,我们可以考虑是否通过广播来接收到某一个时刻的到来呢,终于,系统还是提供了AlarmManager给开发者较为便捷的方式实现定时功能;
本例程共有3个类;
MainActivity.java
AlarmReceiver.java
接收到广播之后就跳转到AlarmActivity中;
例程中也不需要使用相关的权限,清单配置文档如下:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AlarmActivity" />
<!-- android:process=":remote": 新开一个进程 -->
<receiver android:name=".AlarmReceiver" android:process=":remote"/>
</application>
new Handler().postAtTime(r, uptimeMillis);
这样开辟了一条线程,可能在某个时刻系统资源紧缺的情况下清理掉了,即使没有被清理,也可能会因为内存吃紧等情况下回收掉该线程。那么怎么实现定时操作,第一反应是安卓操作系统实现闹钟的功能,那么我们可以尝试从闹钟功能方面进行入手,看有没有相关的接口,在安卓方便,比回调接口更为被动发动的技能就是广播了,我们可以考虑是否通过广播来接收到某一个时刻的到来呢,终于,系统还是提供了AlarmManager给开发者较为便捷的方式实现定时功能;
本例程共有3个类;
MainActivity.java
public class MainActivity extends Activity { private AlarmManager alarmManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); // 创建Intent对象 PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); // 创建PendingIntent alarmManager.set(AlarmManager.RTC_WAKEUP, getTime(), pi); // 设置闹钟,当前时间就唤醒 } private long getTime() { Calendar c=Calendar.getInstance();//获取日期对象 c.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象 int time = c.get(Calendar.SECOND) + 5; c.set(Calendar.SECOND, time); //设置闹钟的秒数 c.set(Calendar.MILLISECOND, 0); //设置闹钟的毫秒数 return c.getTimeInMillis(); } }
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent i=new Intent(context, AlarmActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
接收到广播之后就跳转到AlarmActivity中;
例程中也不需要使用相关的权限,清单配置文档如下:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AlarmActivity" />
<!-- android:process=":remote": 新开一个进程 -->
<receiver android:name=".AlarmReceiver" android:process=":remote"/>
</application>
相关文章推荐
- 使用Quartz实现定时功能
- 使用Quartz动态实现应用的定时功能
- 使用Quartz实现定时功能
- 我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸,androidalarmmanager
- 使用Google Guava实现定时缓存功能
- setTimeout使用闭包功能,实现定时打印数值
- 我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸
- 使用Quartz实现定时功能
- 使用google guava 实现定时缓存功能
- Quartz的配置及使用和定时触发功能的实现
- 使用schtasks 代替 win xp里面的at命令,来实现任务计划和定时功能
- CentOS下使用rsync实现定时复制功能
- Android使用AlarmManager全局定时器实现定时更换壁纸
- 使用Quartz实现定时功能
- 使用Quartz实现定时功能
- 使用setTimeout,实现定时提醒功能
- 使用Timer、AlarmManager实现定时服务+Notification进行模拟推送的实现
- setTimeout使用闭包功能,实现定时打印数值
- setTimeout使用闭包功能,实现定时打印数值
- 使用Quartz实现定时功能