静态变量位于虚拟机的方法区,静态变量是在类被load的时候分配内存的。当类被卸载的时候才会被销毁。
2、静态变量的npe明确一件事,app不是只有在内存不足的情况下被回收,其实当应用被切换成后台的时候长久没使用,也会被系统回收的。比如在应用A页面中突然接到一个电话,在接完电话的时候,应用很可能已经被回收了,此时再次进入A页面时,是系统重新创建的,Application也可能会被重新创建。所以保存在Application、Activity、静态变量都可能为空了。其实Application被回收相当于APP重新打开了,只是页面A被系统记住了,切换前台时是优先显示APP的页面A。
与上述情况相对的是,不能把退出所有的Activity等同于进程的退出。用户点击图标启动应用的时候,以前存放于静态变量的值,大概率还在。这点尤其要注意。
网上有帖子:
关闭一个Activity的时候,由这个Activity初始化的静态变量也会被置空,因此静态变量的生命周期不稳定。
这句话是错误的。事实上,静态变量是伴随APP的生命周期的。如果静态变量为空了,可以肯定APP也是被后台回收了。
3、Activity的静态变量APP如果被系统回收了,由后台切前台进入的某个页面C时,此时Application和该Activity都会重新创建。幸运的是androID系统给了用户保存数据的机会,我们可以利用方法onSaveInstanceState存储数据在系统进程,会为我们保存优先的几个小时,但时间长了一样会被回收掉,这个可以理解,长时间不使用,相当于用户重新打开APP。
4、Application的NPE和上面说的有点重复,Application也是单例对象,当进程被杀掉会被回收,只不过AndroID系统会帮重建Application,所有保存在Application的全局变量也就为空了,但系统一定会调用onCreate()方法。
5、低内存时出现的问题可以监听系统的内存回收状态,发现进程快被杀死时,可以自己手动杀死进程,不给系统机会。简单说说这两种区别:
低内存系统杀死时,在次进入APP会进入离开时的页面,和打电话造成后台进程被回收相似,调用方法onTrimMemory/onLowMemory();
低内存自己手动杀死时,APP相当于重新打开。
低内存有以下几个级别:
TRIM_MEMORY_COMPLETE这个监听的时候有时候监听不到,建议监听TRIM_MEMORY_MODERATE,在这个里面处理退出程序 *** 作。
6、Application使用场景从Application类的方法中可以看到,Application类的应用场景有:(已按优先级排序):
1)初始化应用程序级别的资源,如全局对象、环境配置变量等;
2)数据共享、数据缓存,如设置全局共享变量、方法等
3)获取应用程序当前的内存使用情况,及时释放资源,从避免被系统杀死
4)监听应用程序配置信息的改变,如屏幕旋转等。
5)监听应用程序内所有Activity的生命周期。
总结以上是内存溢出为你收集整理的Android静态变量引起的NPE全部内容,希望文章能够帮你解决Android静态变量引起的NPE所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)