Android OS 6.0 清空静态变量
Android OS 6.0 nulling static variables
我在 Google Play 中有一堆痕迹,似乎应用程序 class 的静态成员为空。
我找到的所有相关帖子都是关于存储数据的,但这些变量不是数据,它们是第 3 方 SDK 实例或其他与应用程序一起使用单例模式的关键对象。
Activity
classes 中使用的数据存储在数据库中,那里没有使用静态引用。
这些痕迹根本没有报告给 Fabric,这很奇怪,因为它是在 Application
onCreate
方法中初始化的。
跟踪表明当FirebaseMessagingService
onMessageReceived
方法被触发时静态变量为null,我需要将消息传递给第3方SDK但由于该实例为null应用程序崩溃.
只有 Android OS 6.0
才能看到痕迹
是否有任何解决方案可以解决这个 OS 版本如此积极地取消静态成员的问题?
谢谢。
这是我使用的示例最小代码:
申请class:
@Override
public void onCreate() {
Engine.init();
}
引擎class:
private static Engine sInstance;
private 3rdParty m3rdParty;
private Engine() {
m3rdParty = new 3rdParty();
}
public static void init() {
if (sInstance == null) {
sInstance = new Engine();
}
}
public static onMessageReceived(RemoteMessage remoteMessage) {
sInstance.m3rdParty.onMessageReceived(remoteMessage);
// Above line crashes with NPE, sEngine or m3rdParty is never set to null in code
}
扩展的 FirebaseMessagingService:
public void onMessageReceived(RemoteMessage remoteMessage) {
Engine.onMessageReceived(remoteMessage);
}
Are there any solutions on how to deal with this OS version being so aggressive nulling static members?
"OS" 不是 "nulling static members"。最有可能的是,您的进程已终止,无论是由于内存不足还是用户操作(例如,将您的任务从概览屏幕上滑出)。这是完全正常的。
我说"most likely",因为你的问题不包含minimal, complete, and verifiable example,堆栈跟踪和相关源代码,所以我不能排除其他可能性。例如,如果您的代码在某些条件下将 null
分配给那些 static
字段,那么在您不期望的情况下可能会满足这些条件。
我在 Google Play 中有一堆痕迹,似乎应用程序 class 的静态成员为空。
我找到的所有相关帖子都是关于存储数据的,但这些变量不是数据,它们是第 3 方 SDK 实例或其他与应用程序一起使用单例模式的关键对象。
Activity
classes 中使用的数据存储在数据库中,那里没有使用静态引用。
这些痕迹根本没有报告给 Fabric,这很奇怪,因为它是在 Application
onCreate
方法中初始化的。
跟踪表明当FirebaseMessagingService
onMessageReceived
方法被触发时静态变量为null,我需要将消息传递给第3方SDK但由于该实例为null应用程序崩溃.
只有 Android OS 6.0
才能看到痕迹是否有任何解决方案可以解决这个 OS 版本如此积极地取消静态成员的问题?
谢谢。
这是我使用的示例最小代码:
申请class:
@Override
public void onCreate() {
Engine.init();
}
引擎class:
private static Engine sInstance;
private 3rdParty m3rdParty;
private Engine() {
m3rdParty = new 3rdParty();
}
public static void init() {
if (sInstance == null) {
sInstance = new Engine();
}
}
public static onMessageReceived(RemoteMessage remoteMessage) {
sInstance.m3rdParty.onMessageReceived(remoteMessage);
// Above line crashes with NPE, sEngine or m3rdParty is never set to null in code
}
扩展的 FirebaseMessagingService:
public void onMessageReceived(RemoteMessage remoteMessage) {
Engine.onMessageReceived(remoteMessage);
}
Are there any solutions on how to deal with this OS version being so aggressive nulling static members?
"OS" 不是 "nulling static members"。最有可能的是,您的进程已终止,无论是由于内存不足还是用户操作(例如,将您的任务从概览屏幕上滑出)。这是完全正常的。
我说"most likely",因为你的问题不包含minimal, complete, and verifiable example,堆栈跟踪和相关源代码,所以我不能排除其他可能性。例如,如果您的代码在某些条件下将 null
分配给那些 static
字段,那么在您不期望的情况下可能会满足这些条件。