横竖屏切换,导致Activity会重新启动(生命周期流程:onPause()、onStop()、onDestroy()、onCreate()、onStart()、onResume())
1、Dialog
Dialog导致内存溢出、WindowTokenException等等
解决方案:DialogFragment替换Dialog.
2、Activity
Activity重建导致数据问题
1、Activity执行生命周期,先onPuase() ---> onStop() ---> onDestroy() ---> onCreate() ---> onStart() ---> onResume()
2、如果在这些生命周期中,操作了某些数据,比如在onCreate中添加一条信息“Name”,当横竖屏切换时,又执行了onCreate()这就导致信息“Name”被重复添加的,在数据集中重复出现,进而导致了数据的错乱现象。
解决方案:
1、设置Activity横竖屏时不执行生命周期的方法:
2、或则:在Activity销毁时进行数据的及时的销毁处理。
3、Fragment
1、Fragment重建,系统将会调用 无参构造方法进行重建。
解决方案:
1、参数数据,通过Bundle传递;不要创建其他有参的构造方法

2、默认保留一个公共的无参的构造方法(必须是公共的、无参的。PS:个人有次为了所谓的增强Fragment的封装性,只想对外部抛出如上图的 newInstance()的创建对象的方法,避免使用者调用无参的构造方法出现忘记传值的问题,私自将 public SettingFragment 改为:private SettingFragment;由此导致Fragment的重创建时(例如:横竖屏切换),导致无法初始化Fragment而终止运行,查其原因:系统在横竖屏切换时进行实例化Fragment对象时,调用的是无参的构造方法,而如果设置为私有的则会导致系统调用无参构造方法失败,进而导致实例化失败)。

网友评论