我看到我的应用程序中发生了一些崩溃,在用户暂停应用程序后(根据需要)用户被注销,但是在将用户设置为null后,活动,片段和适配器仍继续加载。 / p>
用户是Application类中的静态变量,如果没有密码等,则使用Lifecycle.Event.ON_PAUSE功能在此处设置为null:
public class MyApp extends Application implements LifecycleObserver {
public static User user;
@Override
public void onCreate() {
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
super.onCreate();
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void appInPauseState() {
if(!Util.keyguardIsSecure(this) && user != null) {
user.logout();
user = null;
}
}
}
在大多数情况下,这确实工作得很好,但是如果在将用户设置为null时,活动,片段或适配器尚未完成加载,则会发生崩溃。例如,在适配器中,如下所示:
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.apps.myapp.model.User.type' on a null object reference
at com.apps.myapp.adapters.MyAdapter.onBindViewHolder(MyAdapter.java:73)
我当然可以通过在此特定情况下检查用户在onBindHolder中是否为空来避免此崩溃,但是我希望有一种更好的方法来将其添加到使用该用户的每一段代码中。 / p>
有没有一种可靠的方法可以延迟user.logout()
和user = null
行,直到所有活动,片段,适配器等都完成加载?如果不是,除了检查用户是否在使用过的每个地方都被填充外,还有其他方法可以避免此类崩溃吗?
请注意,如果用户没有密码,则必须注销该用户,并且我并不是真正在寻找将用户移至应用程序类之外的解决方案。
在此先感谢您的任何想法!