在下面的代码中,我有一个类,它包含一组变量。我创建了该类的几个实例,并将它们保存到数组中。数组是同一个类的一部分,但标记为静态。同一个应用程序有一个主屏幕应用程序小部件。我担心静态数组将永远留在内存中,直到用户删除应用程序小部件。这是真的吗?静态数组是一个好主意还是什么可以替代?
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));
}
}
发布于 2019-07-23 17:44:57
静态数组将永远留在内存中,直到用户删除应用程序小部件。
这不太可能发生,因为AppWidgetProvider
是安卓小部件的一个方便的BroadcastReceiver
类。如果您的应用程序没有其他任何运行,您的进程可能会在onUpdate()
调用之间终止。
BroadcastReceiver
的官方文档非常清楚地表明
BroadcastReceiver
对象仅在调用onReceive(Context, Intent)
期间有效。一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态。 这对您在onReceive(Context, Intent)
实现中可以做的事情产生了重要的影响:任何需要异步操作的操作都不可用,因为您需要从函数返回来处理异步操作,但此时BroadcastReceiver
不再是活动的,因此系统可以在异步操作完成之前终止其进程。 特别是,您可能不会从BroadcastReceiver
中显示对话框或绑定到服务。对于前者,您应该使用NotificationManager
API。对于后者,可以使用Context.startService()
向服务发送命令。
https://stackoverflow.com/questions/57169273
复制相似问题