您的位置:首页 > 移动开发 > Android开发

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 
UiModeManager
. Added
in API level 8.
用户接口发生改变——这可能发生在用户把它的设备插入底座(dock)或者切换到了夜间模式。查看 API level8 计入的 
UiModeManager


参考:

1、Activity属性官方详解

2、onConfigurationChanged的作用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: