Application Context 和 Widget Context 的区别

Android Widget更新机制深度解析与优化实践 Widget作为Android系统的核心组件,通过AppWidgetProvider实现跨进程动态更新,是提升用户体验的关键技术。其底层依赖RemoteViews的序列化传输机制,在Launcher、AppWidgetService和宿主应用间形成数据流闭环。在移动开发领域,高效的Widget更新策略需要平衡实时性与资源消耗,常见优化手段包括视图复用、批量操作和智能节流。针对天气、新闻等高频更新场景,开发者可采用WorkManager调度后台任务,结合差异化更新检测显著降低性能开销。本文通过剖析Widget 阅读详情

最近在制作桌面时钟应用的过程中,发现如果在AndroidManifest.xml中注册的<receiver>中添加

<intent-filter>
    <action android:name="android.intent.action.TIME_TICK"/>
    <action android:name="android.intent.action.TIME_SET"/>
    <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
</intent-filter>
是无效的。即在继承自AppWidgetProvider的类中onReceive方法无法正常接收到ACTION_TIME_TICK系统消息。

查看了API之后发现有这么一段话:

You can not receive this through components declared in manifests, only by exlicitly registering for it with Context.registerReceiver().

因此删去了XML中的配置,改为在AppWidgetProvider继承类的onEnable方法中添加如下代码:

context.registerReceiver(this, new IntentFilter(Intent.ACTION_TIME_TICK));
context.registerReceiver(this, new IntentFilter(Intent.ACTION_TIME_CHANGED));
context.registerReceiver(this, new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED));
其中的context为onEnable(Context context)的形参。

运行后报错:

android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents 

查阅资料,在stackoverflow上找到解决方案:【http://stackoverflow.com/questions/5112529/register-broadcastreceiver-to-widget-difference-of-context-object】

将context改为Context app_ctx = context.getApplicationContext();

然后再用 app_ctx 去注册Receiver,问题的确解决了。

But i still concern two questions:

Question❶: The difference between Widget Context and Application Context and other Context object (Activity Context)'

Question❷: Because context object was use usually so when to use Application context and when to use other Context.

For ❷ i had found explain relate with memory leak (Ref. 2), but i think it may not enough (Ref.2)

So if your have answer please let me known, any answer appreciated.

Thanks

★Referecens:

(1) http://groups.google.com/group/android-developers/browse_thread/thread/790da1a655f4a227/0b8d6aad1dc2d371?hl=en&lnk=gst&q=Broadcast+Receiver+From+Widget#0b8d6aad1dc2d371

(2) http://developer.android.com/resources/articles/avoiding-memory-leaks.html

除此以外,还有一点令我很困惑: 究竟为何不能直接在XML中注册?



Flutter跨平台开发:从环境搭建到声明式UI实践 跨平台开发框架通过单一代码库实现多端部署,大幅提升开发效率。Flutter作为Google推出的开源UI工具包,采用独特的Skia渲染引擎和声明式编程范式,实现了接近原生的性能表现。其核心原理在于将UI描述与平台渲染解耦,通过Widget树的高效diff算法实现快速更新。这种架构特别适合需要保持一致用户体验的移动应用开发场景,如电商、社交等高频迭代产品。在Mac环境下,通过Android Studio或VS Code配置Flutter开发环境,开发者可以充分利用热重载等特性加速开发流程。声明式UI编程通过状 阅读详情

相关推荐

Tasker 自动化四层模型:触发条件、任务编排与排错

在移动端自动化中,事件驱动与条件触发是通用架构:先定义规则容器,再声明上下文条件,最后由动作序列完成任务。Tasker 的 Profile、Context、Task、Action 正是这一思路的落地:Profile 承载规则,Context 判断时间、位置、应用、状态或事件,Task 仅在条件全部成立时执行 Enter/Exit 分支。理解前台判定、Time/Day 叠加、Location Radius、Cooldown 与 Task Priority 等参数边界,能降低误触发、重复执行和 Exit 丢失。

weixin_28292761的博客 154

BroadcastReceiver components are not allowed to register to receive intents

原因: context.registerReceiver()不能在BroadcastReceiver的onReceive()里面调用 解决: 提高context的级别 context.getApplicationContext().registerReceiver()

vida990717的博客 1948

git连接华为软件开发云

我用的是github客户端的git shell 连接。用git bash也可以github客户端下载地址:https://desktop.github.com/1.在华为软件开发云上创建代码仓库2.在本地创建密钥SSH密钥帮助文档公钥是代码托管服务(CodeHub)识别您的用户身份的一种认证方式,通过公钥,您可以将本地git项目与代码托管服务(CodeHub)建立联系, 然后您就可以很方便的将本地...

sigmeta的博客 2114

android.content.ReceiverCallNotAllowedException问题解决

动态注册BroadcastReceiver时有时候会遇到这个异常: android.content.ReceiverCallNotAllowedException: BroadcastReceiver components are not allowed to register to receive intents 注意以下两点: 1. manifest下配置的broadcast re...

weixin_34360651的博客 731

Hierarchical Flow Partition(Top-down&&Bottom-up)

hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。

qq_39493558的博客 3072

嵌入式定点PID控制器:mrm-pid极简实现与实时控制实践

PID控制器是自动控制领域的基础算法,其核心在于比例、积分、微分三环节的协同调节。在资源受限的嵌入式系统中,传统浮点PID易受时序抖动、内存分配不确定性及FPU依赖影响,难以满足毫秒级确定性响应需求。定点PID通过整数运算替代浮点计算,显著提升执行周期稳定性与跨平台兼容性,成为电机控制、传感器补偿等实时场景的关键技术路径。mrm-pid库以位置式结构、int32_t增益参数、int64_t积分累加器和无动态内存设计,实现了超低开销(12–28 CPU周期)与完全可审计的闭环内核,天然适配Cortex-M系列

weixin_31659095的博客 572

android.content.ReceiverCallNotAllowedException: 解决方法

一、 android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents解决方法: 在Android开发中 1、bindService不能在BroadcastReceiver 中调用,你可以在里面调用StartServi

云守护的专栏 1万+

transformer中QKV的通俗理解(剩女与备胎的故事)

用vit的时候读了一下transformer的思想,前几天面试结束之后发现对QKV又有点忘记了, 写一篇文章来记录一下 参考链接: 哔哩哔哩:在线激情讲解transformer&Attention注意力机制(上)在线激情讲解transformer&Attention注意力机制(上)_哔哩哔哩_bilibiliAttention is all you need介绍 更具体的介绍可以去阅读论文在Attention is all you need这篇文章中提出了著名的Transformer模型Transforme

Peter的博客 1万+

如何理解Flutter中的Widget、State、Context ,他们是为了解决什么问题?

Widget是Flutter应用的基本构建单元。它们描述了应用的UI和布局。每个Widget都是不可变的(immutable),表示应用界面的一部分。State是与StatefulWidget关联的对象,保存了Widget的可变状态。State对象包含了Widget的所有动态信息,负责在状态变化时重新构建UI。是Widget树中每个Widget的位置标识。它包含对父Widget、祖先Widget等的引用,提供了查找和访问Widget树中其他Widgets的信息。Widget:描述UI的不可变组件。

彬_小彬的博客 1275

YOLOv11 改进 - C2PSA | C2PSA融合TSSA(Token Statistics Self-Attention)令牌统计自注意力,优化遮挡目标感知

本文介绍了Token Statistics Self-Attention(TSSA)机制,并将其集成到YOLOv11中。传统自注意力计算复杂度高,TSSA进行了范式转变,基于token统计特征实现高效注意力交互。它通过“算法展开”推导得出,以“最大编码率降低”为目标,实现特征学习。TSSA包含动态分组和低秩投影优化两步创新,具备线性复杂度。我们将TSSA代码集成到YOLOv11的C2PSA模块中。实验表明,改进后的YOLOv11在目标检测任务中表现良好,验证了TSSA机制的有效性。

魔改工程师的博客 669

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

Android 插件化之——给插件中的静态注册的BroadcastReceiver发送广播

为了演示静态广播的插件化,我们首先想到的也是使用类似Activity的占坑方案,但是,由于广播的action是不确定的,就 无法确定占坑的广播的action,这样就无法使用在宿主中预先使用占坑广播的方案,还有一点,就是,静态广播是在apk安装时就被PMS解析,并将manifest文件中的关于四大组件的配置信息都保存起来,当然也包括了广播的信息。由于插件apk是没有被安装的,所以,插件apk中的静态...

hujin2017的博客 623

第一节:初识n8n与下一代工作流自动化

本章介绍了n8n的Fair-code理念与节点式架构,对比了其与Zapier/Make的核心差异,并引导读者在n8n Cloud上完成首次界面导览,建立了工作流自动化的宏观认知。

easeyoo的专栏 106

Widget开发心得及几个问题

在Launcher中增加一个widget,需要以下几个步骤:

GalaxySailor的专栏 514

智能车图像处理2-入门级分析1 ---基础扫线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 7756

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android widget: Activity context vs. Application context

1 Something we know: Activity &Application areall indirect subclasses of Context. java.lang.Object ↳ android.content.Context ↳ android.content.ContextWrapper ↳ android.view.Conte...

weixin_30323961的博客 93

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

一条命令装好 OpenMTP:macOS 下用 Homebrew 管理 Android 文件传输的完整指南

手机里那条 4GB 的视频,现在用一条 `brew install` 就能搬回 Mac:OpenMTP 是 macOS 上的开源 Android 文件传输工具,Homebrew 安装只需一行命令,装完插线即用。本文带你完成 Homebrew 安装 OpenMTP、版本管理,并跑通第一次文件传输。 [![OpenMTP 文件浏览器分栏界面,左侧 Mac 本地目录右侧 Android 设备存储](h

gitblog_00501的博客 191

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用 mcp-use 构建生产级 MCP 服务器:从脚手架到工具、资源与 Widget 的完整实践指南

本文是 CopilotKit 仓库中 `open-mcp-client` 示例([mcp-use-server 应用](https://link.gitcode.com/i/56c88a04304dd970d9c7126527512ce1))内嵌的 Agent Skill 文档([SKILL.md](https://link.gitcode.com/i/17dbddf281186d63628141

gitblog_00704的博客 638

Bone Widget v2.4.0双语版:让Blender骨骼控制器一目了然

在三维动画与角色绑定流程中,骨骼控制器的可识别性直接影响资产复用与团队协作效率。Blender作为开源DCC工具的核心,其自带骨骼图标并不具备语义区分,复杂绑定场景往往陷入“骨头丛林”。此时,为骨骼指定自定义形状(Widget)便成为关键实践。其本质依托姿态骨骼的custom_shape原生属性,通过将独立曲线或网格对象关联至骨骼,将默认八面体替换为直观的圆环、箭头或胶囊图标。自定义控制器不仅降低误选成本,更让动画师在操控FK/IK时如同操作仪表盘。而Bone Widget插件正是将这一底层机制封装为高效的

weixin_33985679的博客 394

gtk怎么设置样式

property name="name">iamlabel</property> //widgetname只是一个属性而已。<object class="GtkLabel" id="l2"> //id作用于大的控件。gtk_style_context_add_provider:引入的css文件,仅仅作用于这个widget而已。gtk_style_context_add_provider_for_screen:作用于整个页面。id是builder用的,widgetname才是css用的。

qq_37398808的博客 425

Folia 全屏歌词播放器快速上手教程:三大平台安装与首次启动验证

Folia 是一款以全屏歌词动画为核心的桌面音乐播放器,支持网易云、酷狗、QQ 音乐、Navidrome 与本地音乐库,提供 Windows、macOS、Linux 三端官方安装包。顺利的话,从拿到安装包到首页搜出一首歌,10 分钟以内可以走完。 ## 先认清你该拿哪个包 安装包都发布在仓库的 Releases 页面,当前版本为 0.7.23,以最新 release 为准: - **Wind

gitblog_00381的博客 918

Textual 样式指南:margin 属性详解与源码级实现原理

`margin` 是 Textual 中用于在部件(widget)四周添加间距的核心样式,负责控制部件与其相邻元素之间的留白。本文基于 [margin 官方参考文档](https://link.gitcode.com/i/70bffabb897502a00280f97b54c2b412) 展开,结合 [CSS 解析源码](https://link.gitcode.com/i/67fa9eb7533

gitblog_00214的博客 361

JupyterLab 音频查看器扩展 @jupyterlab/audio-extension 源码剖析与实战指南

`@jupyterlab/audio-extension` 是 JupyterLab 内置的音频文件查看器扩展,为 JupyterLab 提供在文档界面中直接预览和播放音频文件的能力。本文将以该扩展的 README 为核心,结合其完整源码([packages/audio-extension/src/index.ts](https://link.gitcode.com/i/7516da7fa1b62

gitblog_00482的博客 327

JupyterLab 界面定制完全指南:布局、工具栏、菜单栏、右键菜单与设置编辑器过滤

JupyterLab 的计算环境界面由多个可定制的元素构成,用户既可以新增元素,也可以隐藏默认元素,从而打造贴合自身工作流的界面。本指南以官方界面定制文档为主体,结合仓库内各扩展的 JSON Schema 源码(如 [packages/application-extension/schema/shell.json](https://link.gitcode.com/i/1d0f443fb5cc77

gitblog_00234的博客 382

布局加载LayoutInflater的坑记

错误提示: Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f010064 a=2} Caused by: java.lang.reflect.InvocationTargetException Caused by

元古宙新手的博客 656

安卓启动流程与期间核心组件工作原理

本文以实际工作中出现的启动相关各种千奇百怪的bug为钩子,讲解了安卓app冷启动过程中核心组件的工作原理,pms -> packageParser/androidmanifest.xml -> context -> ams -> application -> activity -> layoutInflater资源加载过程 -> wms /window/WM -> view与viewgroup绘制原理 -> 渲染阶段。理供解决问题的思路,看业务框架代码能看懂他们改的哪块源码,跟他们扯皮能扯赢

mix39的博客 337
上一篇: Libgdx 简易汽车仪表盘
下一篇: 关于Widget和Broadcast Receiver的概念澄清
空想家
博客等级 码龄18年 26粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值