BroadcastReceiver的生命周期

BroadcastReceiver的生命周期

  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”按钮

BroadcastReceiver的生命周期

从上图可以看到AlarmReceiver类的实例是每触发一次就新建一次的,而且和程序是在同一个进程同一线程内.

 

转载于:https://my.oschina.net/droidwolf/blog/285417

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109788.html原文链接:https://javaforall.net

(0)
上一篇 2021年8月30日 下午12:00
下一篇 2021年8月30日 下午1:00


相关推荐

  • keras自带数据集(横线生成器)

    原文地址:AdetailedexampleofhowtousedatageneratorswithKeras引言在使用kears训练model的时候,一般会将所有的训练数据加载到内存中,然后喂给网络,但当内存有限,且数据量过大时,此方法则不再可用。此博客,将介绍如何在多核(多线程)上实时的生成数据,并立即的送入到模型当中训练。工具为keras。Tu…

    2022年4月15日
    62
  • 风云私服架设教程_风云端游

    风云私服架设教程_风云端游需要软件:SQLsever2005pro本站提供下载将服务器端解压缩到D:盘D:\Sagasevr下有6个文件夹1:databaseSQL数据库文件夹2:LoginServer帐号登陆管理器3:WorldServer服务器数据管理器4:GameServer1游戏数据管理器4:GameServer2游戏数据管理器5:GameServer3游戏数据管理器6:GameS…

    2022年10月6日
    5
  • Oracle 视图索引

    Oracle 视图索引第五章视图索引的操作5.1视图的功能一个视图实际上就是封装了一条复杂的查询语句注:为了在当前用户模式中创建视图,要求数据库用户必须有createanyview(创建任何视图)的权限。5.2创建视图的语法create[orreplace]view视图名称as查询语句例:建立一个视图,包含全部部门编号为20的部门的雇员信息(雇员编号,姓名,工作,部门编号)createview…

    2022年7月22日
    13
  • java键盘输入语句_java的输入语句小结

    java键盘输入语句_java的输入语句小结1.使用Scanner使用时需要引入包importjava.util.Scanner;首先定义Scanner对象Scannersc=newScanner(System.in);如果要输入整数,则intn=sc.nextInt();String类型的,则Stringtemp=sc.next();比如:importjava.util.Scanner;publicclass…

    2022年7月7日
    34
  • openwrt释放ip_openwrt stdout

    openwrt释放ip_openwrt stdoutopenwrt清除ipsetip缓存ipsetflushgfwlist

    2022年10月7日
    8
  • 解决:java.lang.AbstractMethodError: null

    解决:java.lang.AbstractMethodError: nullspringboot2.x整合sqlserver使用jtds连接池连数据库的时候出现异常2017-02-1512:12:23.955WARN14844—[main]ationConfigEmbeddedWebApplicationContext:Exceptionencounteredduringcontextinitializ…

    2022年6月2日
    375

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号