非淡泊无以明志,非宁静无以致远。这篇文章主要讲述android是否会为了释放内存而杀死单身?相关的知识,希望能为你提供帮助。
我有一个非常奇怪的问题,很难描述所以请仔细阅读答案之前的假设,以避免跳进我已经知道的东西不是
1- 我有一个从我的服务器登录的android应用程序
2- 成功登录后,我实例化一个Singleton API,它将在各个活动之间共享,以便向服务器发出请求
3- 无法登录时无法使用该应用程序
4- 在我的登录活动中,我的情况非常干净
if(APIFacade.getInstance() != null){
startActivity(new Intent(this,MainActivity.class));
finish();
}else {/*error handling*/}
5- 在整个
startActivity
class中只有一次调用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是否会为了释放内存而杀死单身()】我知道android自然会用于活动,但是单身人士?如果是,我该怎么做才能解决它?
答案好吧,由于一篇很棒的文章,我自己找到了答案:https://medium.com/@davethomas_9528/please-dont-use-singletons-to-persist-state-on-android-7bac9bc78b29
简述: 每个人都说android上的singleston附加到应用程序生命周期,因此只有在应用程序被杀死时才会释放
这是真的
您没有听到的是,应用程序可以被SO杀死而无需用户交互(为前台应用程序释放内存),在这种情况下,当用户尝试返回到您的应用程序时,它将从上次使用的活动重新启动而不是来自发射器活动。
推荐阅读
- 如何将动态创建的.xml文件与主AndroidManifest.xml合并
- Android - Singleton Class仅在第二次刷新时更新
- Android Dagger2,Singleton交叉组件
- 在构建Android库时,我可以使用什么模式来支持Activity中已配置的回调
- 为什么我无法在Application Insights上查看运行时错误()
- Intellij(Android studio)成员变量前缀
- 更改Salesforce App中的RingCentral行为
- 在Android中从Eclipse导出项目时出错
- 8种提高安全性的网络攻击模拟工具