当手机等设备旋转时,为何我们在微信输入框中输入的文字会消失?

    前几天玩微信时,当我在微信中辛辛苦苦的输入了很多的文字,突然手机在手中一滑,微信界面切换到了横屏的模式,我突然发现我输入的文字都没有了。这也算是微信的一个小BUG吧,下面我们来分析下为什么我们的文字会消失,加入我们来设计微信,我们应该保证微信在设备旋转时,输入的文字不丢失。



原因分析:设备旋转时,系统会销毁当前的活动实例,然后创建一个新的活动实例。这里就不演示了,大家记住就好。这其实就是问题的原因,因为活动重建,导致我们输入的文字丢失了。顺便说一下,设备旋转时,APP的现实界面也会出现不协调的问题,所以常用的解决办法是在res目录下,新建一个layout-land目录,在这个目录下重新设计旋转后的界面。这里-land后缀名是android的配置修饰符,android可以通过它来定位最佳资源以匹配当前设备配置。一句话,当横屏时,会调用layout-land目录下的布局文件(*.xml)。



解决思路:当设备发生配置变更,如我们的问题中手机设备发生旋转,activity的onSaveInstanceState就会被执行,我们可以在这里保存我们的数据,当活动重建时,在取出我们的数据。



分析onSaveInstanceState()方法:我们不能说,当activity被销毁时,onSaveInstanceState一定会被调用,因为在我们主动销毁activity时,比如调用finish()方法,按下back键时,都不会调用onSaveInstanceState()方法。那么什么时候会调用呢?

如:1)当用户按下HOME键。    2)按下电源键,关闭屏幕时。    3)设备发生配置变更等情况。此时我们的ACTIVITY可以被回收,但并不是我们主动的销毁我们的activity.也就是说onSaveInstanceState()方法我们是无法调用的,它不受我们的控制,只能由系统来调用。

我们的数据保存在哪:既然activity都销毁了,那数据保存在哪里,我猜测是保存在缓存中。

我们的数据保存多久:当用户主动销毁activity、系统重启、长时间不使用activity时。数据被销毁。

具体方法:


代码如下

创建一个常量作为将要保存在Bundle中的键值对的键
   private static final String KEY_INDEX="inputContentKey";

=================================================onSaveInstanceState方法

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(KEY_INDEX,input_text);   //input_text字符串保存输入内容
}
========================================================= onCreate方法

protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState!=null){
 getInputText=savedInstanceState.getString(KEY_INDEX);  //  当ACTIVITY重建时,获取输入内容
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值