android是否会为了释放内存而杀死单身?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android是否会为了释放内存而杀死单身?相关的知识,希望对你有一定的参考价值。

我有一个非常奇怪的问题,很难描述所以请仔细阅读答案之前的假设,以避免跳进我已经知道的东西不是

1 - 我有一个从我的服务器登录的android应用程序 2 - 成功登录后,我实例化一个Singleton API,它将在各个活动之间共享,以便向服务器发出请求 3 - 无法登录时无法使用该应用程序 4 - 在我的登录活动中,我的情况非常干净

if(APIFacade.getInstance() != null){
startActivity(new Intent(this,MainActivity.class));
                        finish();

}else {/*error handling*/}

5 - 在整个startActivityclass中只有一次调用LoginActivity方法,因此无法在不检查外观是否为空的情况下启动MainActivity 6 - 在实例化之后无法将APIFacade.INSTANCE设置为null

但即使有这些条件,有时用户在NullPointerException上获取MainActivity,当应用程序尝试在登录后首次调用API时

String url = APIFacade.getInstance().getProfilePicUrl(); //throws nullpointerexception on 5% of the times

APIFacade类是这样的:

public class APIFacade {
 private static APIFacade INSTANCE = null;

  @WorkerThread
    public APIFacade(Object i, final boolean preLoad) {
        INSTANCE = this;
//other stuff
}

  public static APIFacade getInstance() {
        return INSTANCE;
    }
}

我无法在开发环境中重现这个问题所以我只知道它是由于firebase上的崩溃性仪表板而发生的...

我相信我的代码没有泄漏来引导这种情况,所以我得到的唯一理论是:当我的应用程序进入后台时,Android正在清理内存中的一些变量...

我知道android自然会用于活动,但是单身人士?如果是,我该怎么做才能解决它?

答案

好吧,由于一篇很棒的文章,我自己找到了答案:https://medium.com/@davethomas_9528/please-dont-use-singletons-to-persist-state-on-android-7bac9bc78b29

简述: 每个人都说android上的singleston附加到应用程序生命周期,因此只有在应用程序被杀死时才会释放

这是真的

您没有听到的是,应用程序可以被SO杀死而无需用户交互(为前台应用程序释放内存),在这种情况下,当用户尝试返回到您的应用程序时,它将从上次使用的活动重新启动而不是来自发射器活动。

以上是关于android是否会为了释放内存而杀死单身?的主要内容,如果未能解决你的问题,请参考以下文章

如果持有它的应用程序或服务被杀死,Android 操作系统是不是会释放唤醒锁?

细说智能指针

Android进程的生命周期

如何限制单个 Linux 进程的内存使用而不杀死该进程

Android应用程序是否有可能杀死自己的进程

为啥有时会立即释放内存,而有时仅在自动释放池耗尽时才释放内存?