首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当主屏幕小部件运行时,数据对象的静态数组是否会导致内存泄漏?

当主屏幕小部件运行时,数据对象的静态数组是否会导致内存泄漏?
EN

Stack Overflow用户
提问于 2019-07-23 17:19:20
回答 1查看 69关注 0票数 2

在下面的代码中,我有一个类,它包含一组变量。我创建了该类的几个实例,并将它们保存到数组中。数组是同一个类的一部分,但标记为静态。同一个应用程序有一个主屏幕应用程序小部件。我担心静态数组将永远留在内存中,直到用户删除应用程序小部件。这是真的吗?静态数组是一个好主意还是什么可以替代?

代码语言:javascript
代码运行次数:0
运行
复制
public class Data {
    public static ArrayList<Data> listData = new ArrayList<Data>();
    String string;
    int integer;
    Data(String string, int integer){
        this.string = string;
        this.integer = integer;
    }
}

public class DataChanger {
    DataChanger(){
        Data.listData.add(new Data("string", 1));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-23 17:44:57

静态数组将永远留在内存中,直到用户删除应用程序小部件。

这不太可能发生,因为AppWidgetProvider是安卓小部件的一个方便的BroadcastReceiver类。如果您的应用程序没有其他任何运行,您的进程可能会在onUpdate()调用之间终止。

BroadcastReceiver的官方文档非常清楚地表明

BroadcastReceiver对象仅在调用onReceive(Context, Intent)期间有效。一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态。 这对您在onReceive(Context, Intent)实现中可以做的事情产生了重要的影响:任何需要异步操作的操作都不可用,因为您需要从函数返回来处理异步操作,但此时BroadcastReceiver不再是活动的,因此系统可以在异步操作完成之前终止其进程。 特别是,您可能不会从BroadcastReceiver中显示对话框或绑定到服务。对于前者,您应该使用NotificationManager API。对于后者,可以使用Context.startService()向服务发送命令。

参考资料- 参考文献1参考文献2参考文献3

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57169273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档