烦人的android幽灵部件(phantom widgets)--Issue 2539

RK3572-Android16-记录一次OTA升级失败解决方案 这里记录一次解决RK3576 Android16 OTA 用Recovery 升级失败的一次解决案例,将部分经验作为总结。本次OTA升级耗时了几天,最终是RK给出的解决方案,再加上经验来解决了其它部分问题新平台,高一点的Android版本,可能本身有bug,多请教平台来,不要蒙着干,干不出来的。 阅读详情

  直接进入正题,情况是这样的:

  如果按正常操作,在桌面上添加了N个小部件(widget)时,很自然,在第一个widget创建时,onEnabled()事件被调用,当最后一个widget被删除时,onDisabled()事件将被调用.

  这是API文档中的描述:

  而当我按以下步骤操作时,情况变了,onEnabled()调用了一次后,无论是删除还是再创建,onEnabled()和disEnabled()事件再也不会被调用!除非卸载当前应用或重启android系统!

  步骤:

  在创建第一个组件时,进入了配置页面,此时很自然onEnabled() 被调用.接着,按下"返回"键——即没有完成配置,而是取消了操作,此时桌面上不出现widget部件.即没有widget在桌面上生成,接着,再进行一次完整widget创建操作,桌面上出现了我需要添加的widget.而此时onEnabled() 事件却没有被调用.再接着把这个widget删除,发现onDisabled()事件也没有触发!后台打印AppWidgetManager.getAppWidgetIds()发现,当我把桌面上的当前所有widget全部删除后,WidgetIds长度依然不为0!也就是说我创建第一个widget时虽然按下"返回"键了,但是widget还是在内存中被创建了.事实上,只要我进入配置后再按"返回"键,就会在WidgetIds中增加一个widgetID,也就是widget在内存中被创建了!所以即使我把桌面上可见的widget全部删除,onDisabled()方法也不会被调用,自然onEnabled()方法也永远不会再调用到!除非卸载当前应用或重启android系统!

  一开始,我以为是因为自己没有设置好setResult的问题,因为在文档里有这么一句描述:

  

  即:当配置Activity第一次打开时,要先设置activity的result值为RESULT_CANCELED,这样当用户在完成配置前按下"返回"键时,widget host不会收到widget配置被调用的通知,小部件(widget)就不会被完成添加.

  可是经确认,我的代码也没有问题,完全是按照ExampleAppWidgetConfigure.java里的写法做的.问题依然存在!

  最终,经过多方查找,才发现,原来这就是所谓的"幽灵部件"(phantom widgets),一个在code.google.com中描述的Issue 2539!

  详细内容请看:http://code.google.com/p/android/issues/detail?id=2539

  看了上面的评论,此情况不仅在配置activity被按返回时出现,当小部件被添加到桌面上,而桌面没有足够的空间用于显示时也会出现!虽然在2009年时就已经有人上传了修改后的源码,但是,并没有解决当桌面上没有足够空间时的问题,并且,这毕竟不是官方的正式修正.一直看到2010.11.24,也只是看到一位朋友提供了一个不需要修改源码而可以避免用户按下"返回"键而出现"幽灵部件"的技巧:就是不使用系统自带的configuration配置:

  没办法,在官方修正这个问题前,只能使用这个办法了!至少暂时不使用widget的配置功能吧!因为这个问题的存在将可能使用户的系统资源被widget消耗,随着幽灵小部件的增多,系统资源将被大量消耗,这不是我们所希望看到的!

  杯具的是,最后一行的评论:

  看来google对小部件这东西的改进并不是很重视,估计也不是很建议大家使用吧!

【pprof】简要学习教程 基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/google/pprof 分析工具 go tool pprof 是命令行指令,用于分析 Profiling 数据,源数据可以是 http 地址,也可以是已经 dump 下当 profile 文件;查看模式可以命令行交互模式,也可以是浏览器模式(-http 参数)。 两种应用 服务型应用 _ "net/http/pprof" 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API . 阅读详情

相关推荐

WPF基础系列六:MVVM框架

MVVM框架 文章目录MVVM框架前言一、MVVM框架简介1. 什么是MVVM?2. MVVM的优势3.MVVM的应用场景二、MVVM使用及示例 前言 在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。 与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过

iceberg7012的博客 2万+

Android插件化最佳方案--Phantom 实践指南

PhantomTest 满帮集团插件化框架Phantom使用演示 Phantom插件化演示(请star支持) 演示demo下载 注意:请将插件apk拷贝至sdcard下。 Phantom介绍 Phantom 是满帮集团开源的一套稳定、灵活、兼容性好的 Android 插件化方案。 Phantom特点 兼容性好:零 Hook,没有调用系统的 hidden API,完美兼容 Androi...

xuexiangjys的博客 3768

Labelme安装教程(附Anaconda安装教程)

本文详细介绍了如何安装Anaconda和Labelme,还提供了常见问题的解决建议。

HanYan_ing的博客 1万+

React框架核心知识及代码

因此,应为函数指定描述性名称。React-Router提供一种被称为客户端路由的东西,通过客户端路由可以将URL地址和React组件进行映射,当URL地址发生变化时,它会根据设置自动的切换到指定组件,并不是由服务器处理,而是通过客户端路由进行切换。在React中,Hooks就是把某个目标结果钩到某个可能会变化的数据源或者事件源上,那么当被钩到的数据或者事件发生变化时,产生这个目标结果的代码会重新执行,产生更新后的结果。React的严格模式,在处于开发模式下,主动的重复调用一些函数,使他们的副作用显现。...

我也是全粘工程师啦 1909

【软件测试】人工智能(AI)在软件测试领域的应用

AI在软件测试领域的应用使测试过程更加自动化、高效和智能。它可以帮助测试团队减轻负担,更快地识别和修复问题,最终提高软件的质量和可靠性。随着AI技术的不断进步,未来AI在软件测试领域的应用将更加广泛和深入。

weixin_46453070的博客 4384

InfiniBand 与 RoCE 协议介绍

InfiniBand 是高性能互联的 “标杆”,以极致的低延迟、高可靠性适用于对性能要求苛刻的场景(如超算、大规模 AI 训练);而 RoCE 通过以太网实现 RDMA,平衡了性能与成本,成为数据中心和云计算的主流选择。两者均基于 RDMA 技术,核心目标是解决传统网络的 “CPU 瓶颈” 和 “延迟瓶颈”,推动高性能计算和分布式系统的发展。

jundao1997的专栏 713

Android桌面控件Widget解析

--!指定AppWidgetProvider接受系统的APPWIDGET_UPDATE广播-->由于widget的布局需要 RemoteViews 支持,因此不能随便定义或自定义View。

C++ JAVA的专栏 3381

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+

Android 之窗口小部件详解

Android 之窗口小部件详解--App Widget      版本号 说明 作者 日期  1.0  添加App Widge介绍和示例  Sky Wang 2013/06/27            1 App Widg

萌萌的It人 www.itmmd.com 3万+

学Simulink——基于风力发电系统的建模与仿真场景:基于自适应控制的风力发电系统输出功率调节

本文详细介绍了使用Simulink搭建风力发电系统自适应控制模型的完整流程。首先阐述了风速波动对电网的影响及自适应控制的优势,然后逐步指导创建Simulink项目、搭建系统结构(包括风速源、风轮机、发电机等模块),重点讲解了模型参考自适应控制器(MRAC)的设计步骤和参数设置方法。通过仿真分析验证了系统在风速变化时仍能保持输出功率稳定,展示了自适应控制的响应速度和鲁棒性。最后提出了引入深度学习预测、多变量控制等优化方向,为新能源领域工程师提供了实用的建模与仿真指导。

amy_mhd的博客 220

【Zephyr存储专题】06_存储块设备驱动开发(Nand Flash)

本文介绍了基于Zephyr系统的NAND Flash驱动实现方案,重点阐述了Flash驱动模型的核心架构和关键API设计。

zero的博客 1803

android中Widget的生命周期

Widget是android中桌面小控件,创建时必须继承AppWidgetProvider,AppWidgetProvider其实就是继承了BroadcastReceiver的Receiver的一种,widget有以下几个生命周期方法: 1.onEnabled方法:此方法在Widget第一次被创建的时候调用,并且只调用一次,此方法中常放入初始化数据,服务的操作。         2.onRec

lg878398509的专栏 6971

3.PCIe协议分析1-预备知识点

PCIE协议分析1主要讲一下四方面: PCI-E配置空间 PCI-E地址映射 PCI-E Bar空间 PCI-E层级结构详谈 (1)PCIE配置空间 我们过来学习PCIE的同学应该都接触各种类型的功能芯片吧,这些功能芯片连接在电路里面我们可以认为它是一个外部设备,这些设备里面有自己独有的寄存器区域,比如SDRAM里面的ID寄存器或者其他配置寄存器。好的,其实我们PCIE板卡也相当...

一个早起的程序员 4144

android中Appwidget的使用

我们常见的桌面小插件,例如一个桌面上系统setgings开关组合,可以控制蓝牙,wifi是否开启,例如一个桌面的小天气等等;这些都是Appwidget的使用例子。 下面介绍如何使用Appwidget; 在使用的过程中涉及到一些关键类,下面一一列举: 1.AppWidget provider: 该类是BroadcastReceiver的子类,里面的onReceive方法里实现了对几个常用的a

ThinkDo的博客 7712

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

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

android应用开发(十):widget的使用

 作者:近乎团队 1、自定义widget必须继承AppWidgetProvider   2、AndroidManifest.xml中必须注册   <receiver android:name=".widget.AppWidget" >   <meta-data   android:name="android.appwidget.provider"...

weixin_30346033的博客 214

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android小部件Widget的简单应用和常见问题

widget支持的控件有限。如果小部件中使用到了列表项如 ListView,GridView 等,在绑定数据时需要使用 RemoteViewsService 并提供一个 RemoteViewsFactory 实例来填充数据 而非 Adapter。PendingIntent.FLAG为0代表该 PendingIntent 不带数据,FLAG_UPDATE_CURRENT表示更新之前,且每次requestCode不一样。设定TextView值,设定控件点击事件,设定列表数据并绑定item点击事件。

曲幽 1426

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android面试题目之(9) 幽灵引用

幽灵引用是android中最不会使用的引用,其作为finalize的替代方案,可以避免finalize的timeout。但是有时候并不是很好用,应为其发生在finalize之后,而这时候,这个对象已经不复存在。 这里的思想是,对象不能不存在,这个时候用另外一个对象去表示对这个对象的引用。 这样的话,对象就可以存在了,类似智能指针。   当然我们也可以用weakreference 做类似...

daojin505的专栏 181

具身智能 2026:启元人形机器人开发者生态的“安卓时刻”来了吗

一个贯穿全文的问题:人形机器人开发者生态,是否正从「封闭垂直」走向「开源平台化」?本文以开源底座的公开数据为标尺,盘点 SDK、URDF、仿真与技能分发的开放程度,并落回启元机器人的开源路径。所有关键数据均标注来源,文末附社区与学堂链接。

在北风吹起的时候加入我们的队伍 在秋雨到来的时候成为彼此的温暖 763

android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送

橘子,计算机视觉方向工程师,深耕 AIGC 与多媒体处理领域,专注技术实用化落地。本文为原创内容,转载请注明来源与作者。优快云 首发 | 版权所有 © 2026。

下载资源或查看教程前,请务必阅读置顶的《免责声明》 536

Android 14 SELinux策略深度解析

init 的全局公开约束(如 neverallow init execute_no_trans,放 public 才能约束所有分区的规则)这就是"哪些可见"的强制机制。alps_s0(MTK 工程)的 device/mediatek/sepolicy/basic/ 提供。所有分区(system/system_ext/product/vendor)都可引用。init的公开约束、跨分区共用的 type/attribute/neverallow。——vendor 的 .cil 只能引用 plat 的。

新时代农民工 105

Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问

延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。

Easyhood的博客 284

Android 模块化收口:能力组合框架、手写 LifecycleOwner 与热修复共存

二十多个模块业务高度相似却各有差异,核心矛盾在于“统一与灵活”的平衡。通过角色接口组合(如IProjectAware、IVoiceAware)实现能力按需注入,新增功能零侵入;用模板方法锁定生命周期流程,确保顺序一致;结合@CallSuper与工厂方法,既约束关键逻辑,又保留子类自由。最终实现:骨架统一、填空自由,管得住业务,又不侵入业务。

mmsx990的博客 397

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 196

安卓部署Linux性能实测:一颗移动处理器,能否胜任日常 Linux 开发?

本文通过在一加Ace5上部署NimoteCode的ARM64 Linux环境,测试了其在CoreMark、SQLite编译及并行构建中的表现。结果显示,尽管单核性能约2.34GHz,多核扩展比达6.15×,但优化编译耗时仍高达35秒,反映移动处理器虽具备一定开发能力,却受限于文件系统开销与运行环境(如PRoot)。实际开发中,非优化构建效率较高,而并行编译可显著提速。结论:安卓手机可作为轻量级开发辅助工具,但无法替代桌面环境,真正价值在于便携性与即时响应,而非全功能替代。

一个不知名码农的专栏 302

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 219

CTF 命令执行题学习笔记:终端特殊字符 $IFS 与 %09 的用法(HelloCTF RCE-labs)

空格被过滤时:用%09(TAB)或$IFS代替空格关键词被过滤时:用通配符?或字符类[f]拼出被禁的词,让 WAF 在原始字符串里看不到它,shell 在执行时再展开这类技巧在后续的命令执行题里会反复用到,建议亲手在靶机上敲一遍感受一下。

YY888888_的博客 542
上一篇: android中关于scrollview内部组件android:layout_height="fill_parent"无效的解决办法
下一篇: 学习笔记-Python-准备环境
青木私享
博客等级 码龄19年 111粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青木私享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值