onConfigurationChanged,oncreate 等

生命周期, 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");
    }

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onRestoreInstanceState(savedInstanceState);
		System.out.println("onRestoreInstanceState");
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		System.out.println("调用了 onStart");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		System.out.println("调用了 onRestart");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		System.out.println("调用了 onResume");
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		super.onSaveInstanceState(outState);
		System.out.println("调用了 onSaveInstanceState");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		System.out.println("调用了 onPause");
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		System.out.println("调用了 onDestroy");
	}

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		// TODO Auto-generated method stub
		super.onConfigurationChanged(newConfig);
		System.out.println("调用了 onConfigurationChanged");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		System.out.println("调用了 onStop");
	}

	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		// TODO Auto-generated method stub
		super.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值