`
h416756139
  • 浏览: 365874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AppWidget RemoteViews 内存溢出

阅读更多

这几天在开发AppWidget时遇到一个奇怪问题:AppWidget上有一个时钟,使用TIME_TICK每分钟更新一次时间,问题是在长时间待机后出现,AppWidget上的时间不能与系统时间同步(ERROR/JavaBinder(1847): !!! FAILED BINDER TRANSACTION !!!)。

通过AIDL通信机制的流程找到这个Log出现在android_os_Binder.cpp文件中android_os_BinderProxy_transact函数内部,原本是一个OutOfMemoryError,这是AIDL Client端访问时传递的Parcelable包过大而引起的错误,而RemoteViews就是一个实现了Parcelable接口的类,它作为AppWidget视图组件传递的数据结构通过AIDL在AppWidget应用向Launcher传递。

产生这个问题的原因主要在于,RemoteViews的set系列函数在其内部会转换成Action对象存放在在ArrayList<Action>中,而在RemoteViews中没有对这个ArrayList<Action>进行清理的操作。而由于更新频率比较高在设计这个应用时把updateAppWidget()操作放在了Service中,并且每次都在重复使用这个RemoteViews对象,这就造成RemoteViews中的ArrayList<Action>中的数据越来越大,造成内存溢出错误。
所以每个RemoteViews对象最好不要重复使用
转载:http://hi.baidu.com/tigerpan/blog/item/26305963df32f949ebf8f843.html

分享到:
评论

相关推荐

    appWidget启动Activity

    一个`appWidget`通常包含一个或多个`RemoteViews`,它们是显示在主屏幕上的视图组件。`RemoteViews`允许开发者创建和更新`appWidget`的内容,而无需直接操作UI线程。`appWidget`的配置和交互通常通过`...

    android之appwidget(一)简单appwidget

    布局文件则定义了AppWidget在主屏幕上的显示样式,通常包含一个或多个远程视图(RemoteViews)。 创建AppWidget的第一步是在AndroidManifest.xml文件中注册AppWidget提供者。你需要指定一个唯一的...

    android appwidget全面解析

    AppWidget主要由两部分构成:WidgetProvider(提供者)和RemoteViews(远程视图)。WidgetProvider负责处理系统广播和事件,控制AppWidget的行为;RemoteViews则是WidgetProvider与主屏幕之间的桥梁,用于定义App...

    android之appwidget(四)终 appwidget控件更新

    2. **onUpdate()方法源码**: 在这个方法中,通常你会遍历所有需要更新的AppWidget实例,为每个实例创建新的RemoteViews对象,并调用`appWidgetManager.updateAppWidget(appWidgetIds, remoteViews)`来更新界面。...

    android AppWidget ListView

    在实践中,还需要注意内存优化和性能提升,因为AppWidget运行在后台服务中,对资源的消耗要特别关注。同时,由于AppWidget的更新频率受到系统限制,所以要合理设计数据更新策略。 总结,`android AppWidget ...

    Android -- AppWidget源码.zip

    在Android系统中,AppWidget是桌面小部件的实现,它允许开发者将应用程序的功能和信息集成到用户的主屏幕上,用户无需打开应用即可与之交互。这个压缩包“Android -- AppWidget源码.zip”很可能是包含了Android App...

    android之appwidget(二)启动新activity

    一个AppWidget由一个或多个`RemoteViews`组成,`RemoteViews`是用于展示在AppWidget上的视图。它们不直接支持启动Activity,但我们可以利用PendingIntent来实现这一功能。PendingIntent是一个表示意图的未来动作,它...

    android app widget 介绍

    App Widget 的概念 一个简单的App Widget例子 PendingIntent的使用 RemoteViews的使用 接收来自App Widget的广播 更新App Widget的控件状态

    Android AppWidget实例验证

    在Android平台上,AppWidget是Android系统提供的一种小部件功能,允许开发者创建可以在用户主屏幕上显示的小应用程序。AppWidgets虽然小巧,但能为用户提供便捷的功能访问,例如天气预报、音乐播放控制等。本教程将...

    Android App Widget 开发

    &lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&gt; android:name="android.appwidget.provider" android:resource="@xml/app_widget_info" /&gt; ``` 最后,为了让用户能够添加你的App ...

    AppWidget

    AppWidget是Android系统提供的一种组件,它允许开发者在用户的主屏幕上创建自定义的小部件,无需用户启动应用程序。这种功能极大地增强了用户体验,使用户能够快速访问或控制应用的功能,而无需打开应用本身。本文将...

    android appwidget使用说明及示例程序

    Android AppWidget是Android系统提供的一种轻量级组件,允许开发者在用户的主屏幕上创建小型应用程序,通常称为小部件或快捷方式。这些小部件不需要用户启动应用,就能直接在主屏幕上显示和交互,为用户提供便捷的...

    appwidget的简单使用

    **AppWidget的简单使用** AppWidget是Android系统提供的一种组件,允许开发者在用户的主屏幕上创建小型、可交互的应用程序小部件。这些小部件无需用户直接启动应用,就能展示实时信息或者提供快速操作入口,极大地...

    android app widget demo

    在"appwidget"这个压缩包文件中,可能包含了示例代码和资源文件,供开发者学习如何实现上述功能。通过研究这些文件,你可以更好地理解App Widget的工作原理和实现细节,从而在自己的项目中创建出富有特色的桌面小...

    android 桌面控件appwidget

    Android 桌面控件(AppWidget)是Android操作系统提供的一种独特功能,允许开发者创建可以在用户主屏幕上显示的小型应用程序组件。这些控件通常提供快速访问应用的核心功能或展示实时信息,如天气预报、日历事件或...

    关于android AppWidget初探①

    - 由于AppWidget运行在系统进程中,应尽量减少其内存占用,避免过度复杂的逻辑和大数据量的处理。 - 使用`IntentService`处理耗时任务,防止阻塞UI线程。 - 为提高性能,尽可能减少不必要的视图更新。 7. **实际...

    android appWidget每日一句源码

    3. 更新UI:在`onUpdate()`方法中,使用`RemoteViews`设置新的名言到AppWidget的TextView中。`RemoteViews`可以修改布局中的View对象,从而更新AppWidget的显示。 三、布局设计 项目的压缩包中可能包含一个或多个...

    Android小部件AppWidget

    在这个方法中,你可以调用AppWidgetManager的updateAppWidget()方法,传入AppWidget实例ID和新的远程视图(RemoteViews)对象,来改变小部件的显示内容。 - 另外,可以设定一个AlarmManager定时触发更新,或者监听...

    appwidget时间每秒刷新一次

    在Android平台上,AppWidget是小部件的简称,它允许开发者创建可以放置在用户主屏幕上的小型应用程序。在本例中,我们关注的是一个特定类型的AppWidget,它显示时间并每秒更新一次。创建这样一个实时更新的时钟App...

    AppWidget桌面小控件

    6. **使用RemoteViews**: RemoteViews是用于描述AppWidget在远程进程中如何显示的类。你可以通过它来设置文本、图片,甚至执行简单的操作,如启动Activity。 7. **更新AppWidget**: 可以通过`AppWidgetManager`的`...

Global site tag (gtag.js) - Google Analytics