我的编程空间,编程开发者的网络收藏夹
学习永远不晚

BroadcastReceiver的思考

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

BroadcastReceiver的思考

上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity是5秒钟)的话,Android就会弹出错误(和Activity超时的错误相同),同时需要注意的是Activity、Service和BroadcastReceiver都是运行在本进程的主线程里面的。通过这个测试让傻蛋进一步产生了疑问,如果在Service中处理一个长时间的任务会怎么样?

 

启动一个Service,然后在Service的onCreate()方法中添加如下代码:

  1. try {  
  2.    
  3.           Log.v(TAG , "sleep start …..");  
  4.    
  5.          Thread.sleep(20000);  
  6.    
  7.          Log.v(TAG,"sleep end …..");  
  8.    
  9. } catch (InterruptedException e) {  
  10.    
  11.    
  12.    
  13.          / / TODO Auto-generated catch block  
  14.    
  15.          e.printStackTrace();  
  16.    

单就是让Service睡眠20秒钟,我们会发现,sleep start…. 和 sleep end….这两个日志打印出来了,但是后台还会出现如下错误,前台弹出no response超时对话框。

 

当傻蛋在onCreate()中新启动一个线程来,睡眠时,程序正常。

所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。

在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context到底是哪一个context?是Activity还是Application?通过傻蛋测试发现:
如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个context就是这个Activity,而如果是通过AndroidManifest来注册的话,那么这个context就是:android.app.ReceiverRestrictedContext。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

BroadcastReceiver的思考

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

BroadcastReceiver的思考

上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity是5秒钟)的话,Android就
2023-01-31

注册时的BroadcastReceiver的onReceive触发

当我们注册一个BroadcastReceiver时,该接收器将会接收并处理与其过滤器匹配的所有广播消息。当接收到广播消息时,系统会自动调用BroadcastReceiver的onReceive()方法来处理该消息。onReceive()方法
2023-09-26

Android Service的思考(3

前两篇文章中可以看到Activity和Service,context.startService对应着Service中的onStart()方法,context.onBindService对应的是Service中的onBind()方法。当我们继
2023-01-31

Android查看电池电量的方法(基于BroadcastReceiver)

本文实例讲述了Android查看电池电量的方法。分享给大家供大家参考,具体如下: 程序如下:import android.app.Activity; import android.app.Dialog; import android.con
2022-06-06

Android中BroadcastReceiver(异步接收广播Intent)的使用

Broadcast Receiver简介 Broadcast Receiver是Android的五大组件之一,使用频率也很高。 用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、广
2022-06-06

软考的「以考代评」是什么意思?

  大家在拿到软考证书后,很多人最关心的一个问题就是关于职称评聘问题,今天就以软考证书如何申请评中级职称及职称申请流程的详细介绍,希望可以帮到大家。  所谓职称其实是一个专业技术职务,每个单位根据上级单位要求设置相应比例的高、中、初级专业技术岗位,比如2:5:3比例。根据总人数控制你们单位高、中、初级专业技术人员名额。
软考的「以考代评」是什么意思?
2024-04-19

对python并发编程的思考

为了提高系统密集型运算的效率,我们常常会使用到多个进程或者是多个线程,python中的Threading包实现了线程,multiprocessing 包则实现了多进程。而在3.2版本的python中,将进程与线程进一步封装成concurre
2023-01-31

关于Java栈与堆的思考

关于Java栈与堆的思考[@more@]  1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。   2. 栈的优势是,存取速度比堆要快,仅次于直
2023-06-03

关于Android MVP模式的思考

这一周对现有的Android项目进行了框架重构,使用MVP模式来重新构建整个项目和包结构。来总结一下我在这个过程中理解和实践吧。MVP概述MVP是指Model,View和Presenter的缩写,是MVC模式的一种改进版。MVP是一种非常适
2022-06-06

战略思考3+1

之所以说“战略思考”(Strategic Thinking)而不是说“战略思维”,是不想把题目搞得太大,最后弄得自己都不好收拾。    以老刘的愚见,战略思考和非战略思考的区别在于“度”,基本上,这个“度”包括三个维度:高度、广度、深度。 
2023-01-31

关于Python课程的一些思考。

出于对网络爬虫的好奇,我选修了Python程序设计,至于pyhton还能干啥还不太清除,只觉得爬一些数据很有意思,所以希望老师讲一些数据分析之类的技术。学完课程希望能分析一些数据,比如:还有:上课的话希望快速讲完基础知识(语法什么的),然后
2023-01-30

对HashMap的思考及手写实现

作者:张丰哲原文:https://www.jianshu.com/p/b638f19aeb64HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析Has
2023-06-02

软考以考代评是什么意思?

  软考以考代评是什么意思?软考以考代评怎么解释?软考以考代评从2004年1月1日起实施,2004年1月1日起全国不再进行计算机技术与软件相应专业和级别的专业技术职务任职资格的评审工作。通过软考考试,代表其具备了评职称的相应资格。  软考以考代评从2004年1月1日起实施,2004年1月1日起全国不再进行计算机技术与软
软考以考代评是什么意思?
2024-04-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录