标签:android singleton static-members application-lifecycle
我们大多数人都熟悉这种模式:
public class MySingeltone {
public String mSomeReferenceTypeData;
public int mSomeValueTypeData;
private static MySingeltone mInstance;
private MySingeltone() {
}
public static MySingeltone getInstance() {
if (mInstance == null) {
mInstance = new MySingeltone();
}
return mInstance;
}
}
我的问题是我最近发现mInstance在使用他的活动被销毁之后,或者当整个应用程序假设为子句时,不等于null,例如:
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MySingeltone mySingeltone = MySingeltone.getInstance();
mySingeltone.mSomeReferenceTypeData = "some value";
}
}
在关闭整个应用程序运行活动(比如说…之后10秒)下次启动“SomeActivity”时,mInstance仍保持相同的引用,并且在其字段上具有相同的值.
它为什么会发生?
我错过了什么?
当android垃圾收集静态成员属于应用程序?
解决方法:
由于“mInstance”是一个静态变量,因此当您关闭应用程序时它不会为null.关闭应用程序并不意味着您的应用程序被销毁.
此外,没有关闭您的Android应用程序的概念.如果你离开你的应用程序,它不会同时被销毁.当Android不再使用时,Android操作系统会在内部处理它.如果内存不足,当android决定销毁应用程序时,这个静态变量也将为null.
标签:android,singleton,static-members,application-lifecycle 来源: https://codeday.me/bug/20190613/1233142.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。