onConfigurationChanged,oncreate 等

来源:互联网 发布:天谕玉虚男捏脸数据 编辑:程序博客网 时间:2024/06/10 16:29

生命周期, onconfigchanged 等 

测试  代码:

package com.example.configtest;import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        System.out.println("调用了 oncreate");    }@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);System.out.println("onRestoreInstanceState");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();System.out.println("调用了 onStart");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();System.out.println("调用了 onRestart");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();System.out.println("调用了 onResume");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);System.out.println("调用了 onSaveInstanceState");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();System.out.println("调用了 onPause");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("调用了 onDestroy");}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);System.out.println("调用了 onConfigurationChanged");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();System.out.println("调用了 onStop");}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);System.out.println("调用了 onWindowFocusChanged");}        }
空白 到 启动 :


下拉  通知栏 : 只有  onWindowFocusChanged 发生变化(中间 4个 onWindowFocusChanged是因为下拉-恢复了2次 )

按 返回键:


再次启动  并点击  home键


点击 home键是 从  蓝色  onpause 开始的.

再次 进入:



下面 测试  横竖屏 切换 

首先  不在manifest 里面做 android: configchanges 配置:

竖屏  ---> 横屏:


从 honecomb 版本开始, 直到 onstop()返回后, 程序才才可能处于 killable状态, 这意味这 onSaveInstaceState 可能会出现在 onpause后面.

可以看到,  切屏时, 程序 销毁重建了一次. onRestoreInstanceState 出现在 onstart 后面.  通常 用oncreate (bundle) 里完成 onRestoreInstanceState数据处理也是可以的, 应为它们的参数一样的.


下面我们来看   横屏 --> 竖屏:

与上面一样, 网上说 要执行2次但 我这里只执行一次, 也许跟输入法有关.

也就是说   不配置 , 无论 横竖 都 要重建 一次(且不会调用 onConfigurationChanged)

配了 orientation 后,   调用该函数一次且 要重建一次

----------------------------------------------------------------------------------

android:configChanges="orientation"

竖屏--->横屏:


横屏--->竖屏:


----------------------------------------------------------------------------------------------------------------

android:configChanges="orientation|keyboardHidden"

竖屏--->横屏:


横屏--->竖屏:


用的华为  4.4android系统. 

从 honecomb  -3.1 版本开始有了变化

已查明原因, 新版机器就是这样  要想  不重建   需要加上  android:configChanges="orientation|screenSize"

有了这个,  切屏(无论横竖 )都只调用 一次    :



\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


新建一个 老版本的 模拟器 试一下

这次用的是  2.2 的模拟器

前面的 启动  返回键   都是一样的结果 .

按下  home键时  有些  变化:


这个 onSaveInstaceState  跑到onpause 前面去了


在不配置  android:configchenges  时: 结果 如下

竖屏--->横屏:


同样  也是   onSaveInstaceState  跑到onpause 前面去了

横屏--->竖屏:


这个是真正 执行了2次.

android:configChanges="orientation"

竖屏--->横屏:


没有任何变化


横屏-->竖屏:


多了 一个函数


------------------------------------------------------------------------------------------------------------------------

  android:configChanges="orientation|keyboardHidden"

竖屏--->横屏:


横屏-->竖屏:




////////////////////

顺便说一下 , 弹出  toast或者  自己的dialog 不会调用  生命周期函数的. (除非 该dialog是 别人的,  这也是  dialog创建时  的context的一个作用).



0 0
原创粉丝点击