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类的实例是每触发一次就新建一次的,而且和程序是在同一个进程同一线程内.
分享到:
相关推荐
3. BroadcastReceiver生命周期:BroadcastReceiver通常用于接收系统广播消息,其生命周期非常短暂。在接收到广播时,onReceive()方法会被调用,所有工作需要在此方法中快速完成,因为它不能执行耗时操作,否则可能...
### BroadcastReceiver生命周期 `BroadcastReceiver`的生命周期非常短暂,主要包含两个关键方法:`onReceive()`。当广播事件到达时,系统会调用`onReceive()`方法,开发者应该在此方法中执行所有必要的操作,因为...
**BroadcastReceiver生命周期** BroadcastReceiver的生命周期非常短暂,主要包含两个阶段:创建和销毁。onReceive()方法是其核心,所有处理逻辑都在这个方法内完成,因此应该尽可能减少在此方法中的耗时操作,以避免...
1.3 BroadcastReceiver生命周期 BroadcastReceiver的生命很短暂,它的`onReceive()`方法执行完成后,系统就会回收该对象。因此,所有的处理工作应该在`onReceive()`方法内快速完成,不应在此处执行耗时操作,如网络...
3. BroadcastReceiver生命周期:广播接收器用于接收系统或应用发送的广播消息。它的生命周期非常短暂,主要在onReceive()方法中处理广播事件。 4. ContentProvider生命周期:ContentProvider用于管理应用间的数据...
三、BroadcastReceiver生命周期 BroadcastReceiver的生命周期由onReceive()方法构成。当广播Intent匹配到BroadcastReceiver时,系统会调用此方法,开发者在此处理业务逻辑。由于生命周期短暂,所有操作应尽快完成,...
3. **BroadcastReceiver生命周期** - BroadcastReceiver没有完整的生命周期,只有onReceive()方法。当接收到匹配的广播时,系统会调用此方法,处理完广播后,BroadcastReceiver就会被销毁。 4. **Intent与...
BroadCastReceiver生命周期 BroadCastReceiver是Android中的一个组件,用于接收系统或应用发出的广播。其生命周期较短,只在OnReceive方法执行期间处于活跃状态。在OnReceive执行完毕后,BroadCastReceiver将变为...
Android生命周期是指一个Activity、Service、BroadcastReceiver或ContentProvider从创建到销毁的过程。每个组件都有其特定的生命周期方法,开发者需要根据这些方法来编写代码,确保应用程序能够正确响应系统事件,如...
该技术原理包括 Android 组件模型、 Intent 机制、Activity 生命周期、Service 生命周期、BroadcastReceiver 生命周期、Content Provider 生命周期等。 4. 基本组件和常用设计模式 Android 中的基本组件包括 ...
4. **BroadcastReceiver生命周期**: BroadcastReceiver的生命周期非常短暂,主要包含onReceive()方法。当接收到广播时,系统会调用这个方法,开发者应在此处处理广播事件,处理速度要快,避免阻塞主线程。 5. **...
三、BroadcastReceiver生命周期 BroadcastReceiver的生命周期非常短暂,主要由两个关键方法组成: - onReceive(Context context, Intent intent):当BroadcastReceiver接收到匹配的广播时,系统会调用此方法。在这...
由于BroadcastReceiver生命周期的特性,不适合在此执行耗时操作,建议将耗时任务交给Service处理。同时,由于BroadcastReceiver所在进程可能因内存需求被系统优先杀死,因此使用子线程不是一个可靠的解决方案。 ...
3. **BroadcastReceiver生命周期**: 广播接收者的生命周期非常短暂,仅在接收到广播时创建,并在处理完意图后销毁。因此,接收者不应执行耗时操作,否则可能导致ANR(Application Not Responding)错误。 4. **...
2. **BroadcastReceiver生命周期**:尽管BroadcastReceiver自身没有完整的生命周期,但onReceive()方法执行完毕后,系统会自动释放资源。若需要执行耗时操作,建议启动Service。 3. **权限管理**:某些系统广播需要...
二、BroadcastReceiver生命周期 BroadcastReceiver的生命周期非常短暂,通常只包含onReceive()方法。在这个方法中,你应该快速完成所有操作,因为系统可能在任何时候回收BroadcastReceiver的内存。 ```java @...
1. **BroadcastReceiver生命周期** - `onReceive()`: 接收到广播时调用,执行时间需控制在10秒以内,否则可能导致ANR。 - 注册方式: - 静态注册: 在Manifest中注册,即使应用退出仍可接收广播。 - 动态注册: 在...
Android应用开发基于一套完整的框架和模式,其中包括了核心组件(Activity、Service、BroadcastReceiver、ContentProvider)、进程与线程管理、远程过程调用以及组件生命周期管理等。了解这些基本概念对于构建高质量...
这种方式适用于需要灵活控制BroadcastReceiver生命周期的情况。 #### 五、示例分析 在给出的例子中,主要演示了如何创建一个BroadcastReceiver来接收系统启动完成的广播(`android.intent.action.BOOT_COMPLETED`)...