Android Activity onCreate()方法重复执行
2016-08-19 16:45
381 查看
摘要:
Android程序的Activity的onCreate()重复执行,导致界面多次加载,影响用户体验。
问题描述:
1、程序运行在平板上(有底座,如图1-1 底座有串口、USB口、电源口、以太网口),Activity正常显示界面。当平板放在底座时,网络是以太网(有线网络),当平板脱离底座时,网络是无线网,该过程有网络切换;
2、当把平板从底座拿起时,程序crash.
图1-1
问题分析:
1、程序在网络切换的过程中可能未捕获网络状态的变化,程序bug导致;
2、平板和底座接触时,可能有硬件方面的触发,而程序未捕获该变化,程序bug所致;
3、onCreate()方法重复执行了一次,可能是Configuration中数据发生改变,导致Activity生命周期发生改变而调用。
问题解决:
1、检查检测网络切换部分代码,正常;
2、在Android清单文件中添加 android:configChanges属性,把所有属性值赋上;
3、在Acitivity中重写onConfigurationChanged方法,将放在底座和脱离底座时的Configuration打印出来对比,有差异的就是变化的,如下是本人测试数据:
1)放在底座时,在activity的onCreate方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg landdesk finger -keyb/v/h -nav/h s.515}
2)从底座时拿起平板时,在activity的onConfigurationChanged方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg land finger -keyb/v/h -nav/h s.518}
3)放到底座时,在activity的onConfigurationChanged方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg land
desk finger -keyb/v/h -nav/h s.523}
分析以上数据可知,desk是区别所在。desk隶属于configChanges中的uiMode(用户接口模式),如下修改:
android:configChanges="uiMode"
uiMode:
The user interface mode has changed — this can be caused when the user places
the device into a desk/car dock or when the night mode changes. See
in API level 8.
用户接口发生改变——这可能发生在用户把它的设备插入底座(dock)或者切换到了夜间模式。查看 API level8 计入的
参考:
1、Activity属性官方详解
2、onConfigurationChanged的作用
Android程序的Activity的onCreate()重复执行,导致界面多次加载,影响用户体验。
问题描述:
1、程序运行在平板上(有底座,如图1-1 底座有串口、USB口、电源口、以太网口),Activity正常显示界面。当平板放在底座时,网络是以太网(有线网络),当平板脱离底座时,网络是无线网,该过程有网络切换;
2、当把平板从底座拿起时,程序crash.
图1-1
问题分析:
1、程序在网络切换的过程中可能未捕获网络状态的变化,程序bug导致;
2、平板和底座接触时,可能有硬件方面的触发,而程序未捕获该变化,程序bug所致;
3、onCreate()方法重复执行了一次,可能是Configuration中数据发生改变,导致Activity生命周期发生改变而调用。
问题解决:
1、检查检测网络切换部分代码,正常;
2、在Android清单文件中添加 android:configChanges属性,把所有属性值赋上;
3、在Acitivity中重写onConfigurationChanged方法,将放在底座和脱离底座时的Configuration打印出来对比,有差异的就是变化的,如下是本人测试数据:
1)放在底座时,在activity的onCreate方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg landdesk finger -keyb/v/h -nav/h s.515}
2)从底座时拿起平板时,在activity的onConfigurationChanged方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg land finger -keyb/v/h -nav/h s.518}
3)放到底座时,在activity的onConfigurationChanged方法中获得的Configuration
{1.0 ?mcc?mnc zh_CN ldltr sw800dp w1280dp h727dp 160dpi xlrg land
desk finger -keyb/v/h -nav/h s.523}
分析以上数据可知,desk是区别所在。desk隶属于configChanges中的uiMode(用户接口模式),如下修改:
android:configChanges="uiMode"
uiMode:
The user interface mode has changed — this can be caused when the user places
the device into a desk/car dock or when the night mode changes. See
UiModeManager. Added
in API level 8.
用户接口发生改变——这可能发生在用户把它的设备插入底座(dock)或者切换到了夜间模式。查看 API level8 计入的
UiModeManager.
参考:
1、Activity属性官方详解
2、onConfigurationChanged的作用
相关文章推荐
- Android开发中Activity切换导致的onCreate重复执行的问题
- 怎样实现android 返回到上一个Activity并重新执行一次onCreate方法
- Android开发中Activity切换导致的onCreate重复执行的问题
- 【Android】activity 切换到后台onCreate重复执行的问题
- Android开发中Activity中onCreate重复执行的问题
- Android 屏幕旋转后防止重新执行onCreate的方法。
- Android多个Activity切换时其生命周期中的方法执行顺序
- Android 返回上一个Activity总是执行onCreate
- Android:Activity中onCreate方法的参数及用途
- Activity切换导致的onCreate重复执行
- Activity切换导致的onCreate重复执行
- android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明
- android屏幕旋转时,Activity不重新调用onCreate的方法
- android中ListView多次刷新重复执行getView的解决方法
- Android入门- 关于Activity下的onCreate方法
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
- 解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
- Activity切换导致的onCreate重复执行[转]
- android81--两个Activity之间跳转时必然会执行的是哪几个方法
- 【Android开发】onActivityResult无执行的解决方法