BroadcastReceiver在android中是一特色功能.android系统的很多消息(如系统启动,新短信,来电话等)都通过BroadcastReceiver来分发.BroadcastReceiver的生命周期是短暂的,而且是消息一到达则创建执行完毕就立刻销毁的.为了说明这一点,我通过注册一个Alarm Service每7秒钟触发产生一次BroadcastReceive事件.
以下是BroadcastReceive的实现
protected static final class AlarmReceiver extends BroadcastReceiver{
public AlarmReceiver()
{
//查看类创建的进程id和线程id
Log.i("AlarmReceiver.AlarmReceiver()", Calendar.getInstance().getTime().toLocaleString());
Log.i("AlarmReceiver.AlarmReceiver() -> pid", String.valueOf(android.os.Process.myPid()));
Log.i("AlarmReceiver.AlarmReceiver() -> tid", String.valueOf(android.os.Process.myTid()));
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("AlarmReceiver.onReceive()", Calendar.getInstance().getTime().toLocaleString());
}
}
通过一个"Start"按钮和一个"Stop"按钮来控制消息.
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId()){
case R.id.btnStart:
Log.i("current pid", String.valueOf(android.os.Process.myPid()));
Log.i("current tid", String.valueOf(android.os.Process.myTid()));
((AlarmManager)this.getSystemService(Context.ALARM_SERVICE))
.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 7*1000,
PendingIntent.getBroadcast(this, 0, new Intent(this,AlarmReceiver.class), 0)
);
break;
case R.id.btnStop:
((AlarmManager)this.getSystemService(Context.ALARM_SERVICE))
.cancel(PendingIntent.getBroadcast(this, 0, new Intent(this,AlarmReceiver.class), 0));
break;
}
}
打开logCat选择I,运行清理掉所有日志点击"Start"按钮
从上图可以看到AlarmReceiver类的实例是每触发一次就新建一次的,而且和程序是在同一个进程同一线程内.
分享到:
相关推荐
Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器......
Widget是android中桌面小控件,创建时必须继承AppWidgetProvider,AppWidgetProvider其实就是继承了BroadcastReceiver的Receiver的一种,widget有以下几个生命周期方法: 1.onEnabled方法:此方法在Widget第一次被...
本文实例讲述了Android编程中的四大基本组件与生命周期。分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解...
Android:Intent页面跳转,Activity生命周期,Service服务,广播代码实例
10.1.4 Service的生命周期 381 10.2 跨进程调用Service (AIDL服务) 382 10.2.1 AIDL服务简介 382 10.2.2 创建AIDL文件 383 10.2.3 将接口暴露给客户端 383 10.2.4 客户端访问AIDLService 385 10.3...
子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如 果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。顺便提及一句,你也应该避免在Intent Receiver里启动一个...
Service的生命周期 绑定Activity和Service 在BroadcastReceiver中启动Service 系统服务 时间服务 在线程中更新GUI组件 AIDL服务 在AIDL服务中传递复杂的数据
8.1 Service起步 8.1.1 Service的生命周期 8.1.2 绑定Activity和Service 8.1.3 在BroadcastReceiver中启动Ser.. 8.2.1 获得系统服务+ 8.2.2 在模拟器上模拟重力感应 8.3.1 计时器:Chronometer...
本章内容服务(Service)是Android... Service的生命周期 绑定Activity和Service 在BroadcastReceiver中启动Service 系统服务 时间服务 在线程中更新GUI组件 AIDL服务 在AIDL服务中传递复杂的数据
Android四大基本组件介绍与生命周期Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。 Android四大基本组件介绍与生命周期 Android四大基本组件分别是...
Service组件 Service一般由一个Activity或其他Context对象来启动,当启动Service之后,该Se rvice将会在后台运行,及时启动这个Service的Activity或其他组件的生命周期已经结 束,Service仍然会继续运行,直到自己...
Service 的生命周期 绑定 Activity和 Service 在 BroadcastReceiver 中启动 Service 系统服务 时间服务 在线程中更新 GUI 组件 AIDL服务 在 AIDL服务中传递复杂的数据
从最常见的Activity生命周期回调开始,到BroadcastReceiver、Service以及Sqlite等。Activity、BroadcastReceiver和Service这些基本组件的回调路径和过程也就是通常意义上所谓的“生命周期”。同时,在处理具体的业务...
Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:...
内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无法及时释放。情况如下:静态集合类引起内存泄露,各种数据链接没有关闭,内部类,单例 避免 OOM 异常: 程序需要申请一段“大”内存,...
1 Activity 与 Fragment 之间常见的几种通信方式? 2 LaunchMode 的应用场景? 3 BroadcastReceiver 与LocalBroadcastReceiver 有什么区别?...6 谈一谈startService和bindService的区别,生命周期以及使用场景? ...
接着,课件详细讲解了Android开发的关键技术和要点,包括Activity和Service的生命周期管理、Intent和BroadcastReceiver的通信机制、数据存储和访问、网络编程以及UI设计等。通过结合实例和代码演示,使开发者能够...
4) SecActivity.java,广播的生命周期回调函数; 5) StaticReceiver.java 被静态注册的广播接收器; 6) DynamicReceiver.java 被动态注册的广播接收器; 7) 在 AndroidManifest.xml 中注册 StaticReceiver; 8) 在 ...
3.2 Activity的生命周期 3.3 基本用法 3.3.1 创建Activity 3.3.2 启动Activity 3.3.3 窗口Activity 3.3.4 Activity生命周期验证 3.4 Activity之间通信 3.4.1 Activity传递一般类型 3.4.2 Activity传递对象类型 3.4.2...