activityA和B A跳转到B

1:在主配置文件中添加Bactivity,如果不想B在横竖屏切换的时候导致activity的销毁和重新创建;可在声明activity中添加

android:configChanges="keyboardHidden|orientation"

[html] view plaincopy
  1. <!-- android:configChanges="keyboardHidden|orientation" 禁止activity在横竖屏的时候activity被重新创建或者重启,导致数据丢失,在游戏制作中尤为重要 -->
  2. <activity
  3. android:name=".DemoActivity"
  4. android:configChanges="keyboardHidden|orientation"
  5. android:theme="@android:style/Theme.Dialog" />
  6. <!-- android:theme="@android:style/Theme.Dialog" 设置该activity的显示样式是一对话框的形式显示 -->

2:在A的配置文件中添加一个按钮.和单击事件

3:重写A中父类的onCreate onDestroy onPause onRestart onResume onStart onStop 方法,并添加system.out的TAG

为了避免横竖屏和以为一些异常导致activity的销毁和数据丢失,就重写onSaveInstanceState这个方法,该方法可以保存当前页面因为异常导致的activity销毁时候数据,然后在下载onCreate的时候调用者写数据就可以了,onCreate中的参数就是onSaveInstanceState方法中放入的bundle对象

[java] view plaincopy
  1. package com.example.lifecycle;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. /**
  7. * 声明周期: 一个对象被创建出来 到 被销毁(或者垃圾回收)的这个过程中所必须的方法
  8. *
  9. * @author w
  10. *
  11. */
  12. public class MainActivity extends Activity {
  13. /**
  14. * A 激活下一个activity之前的页面 B激活下一个activity之后的页面<br>
  15. * 程序第一次被部署的时候,执行第一个activity的onCreate onStart onResume 方法<br>
  16. * 激活下一个activity 执行A的onPause B onCreate onStart onResume A的 onStop<br>
  17. * 在B中点击返回按钮执行B的finidsh onPause A的 onRestart onStart onResume B的 onStop
  18. * onDestroy<br>
  19. * 在A中点击返回 执行 A的 finish onPause onStop onDestroy <br>
  20. * 在A中点击home键 执行A的onPause onStop方法<br>
  21. */
  22. @Override
  23. /**
  24. * activity第一次被创建的时候执行,可做一些初始化工作
  25. */
  26. public void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.main);
  29. System.out.println("main onCreate");
  30. int page = 0;
  31. if (savedInstanceState != null) {// savedInstanceState
  32. // 接收因异常回收页面传来的bundle值
  33. page = savedInstanceState.getInt("page");// 取得传来的bundle中的值
  34. }
  35. System.out.println("当前: " + page);
  36. }
  37. /**
  38. * click点击事件
  39. */
  40. public void click(View view) {
  41. Intent intent = new Intent(this, DemoActivity.class);
  42. startActivity(intent);
  43. }
  44. @Override
  45. public void finish() {
  46. super.finish();
  47. System.out.println("main finish");
  48. }
  49. @Override
  50. /**
  51. * activity被销毁的时候执行的方法
  52. */
  53. protected void onDestroy() {
  54. super.onDestroy();
  55. System.out.println("main onDestroy");
  56. }
  57. @Override
  58. /**
  59. * 当界面失去焦点的时候
  60. */
  61. protected void onPause() {
  62. super.onPause();
  63. System.out.println("main onPause");
  64. }
  65. @Override
  66. protected void onRestart() {
  67. super.onRestart();
  68. System.out.println("main onRestart");
  69. }
  70. @Override
  71. /**
  72. * 界面的控件可以获取焦点的时候
  73. */
  74. protected void onResume() {
  75. super.onResume();
  76. System.out.println("main onResume");
  77. }
  78. @Override
  79. /**
  80. * 当界面可以被用户可见,当用户再次返回该activity的时候,可以用这个方法来做一些数据的更新
  81. */
  82. protected void onStart() {
  83. super.onStart();
  84. System.out.println("main onStart");
  85. }
  86. @Override
  87. /**
  88. * 界面用户完全不可见的时候调用,比如正在看视屏,来一电话,可以用该方法停止播放
  89. */
  90. protected void onStop() {
  91. super.onStop();
  92. System.out.println("main onStop");
  93. }
  94. @Override
  95. /**
  96. * 当activity被异常销毁(回收)的时候调用,如果是自适应屏幕,
  97. * 如果是一个阅读器,在看的时候突然没电了,就会调用这个方法,当下次调用者个页面的时候,会调用onCreate方法,并把这个参数的bundle对象传给oncreate方法,<br>
  98. * oncreate方法中的bundle参数就是该值
  99. */
  100. protected void onSaveInstanceState(Bundle outState) {
  101. // TODO Auto-generated method stub
  102. super.onSaveInstanceState(outState);
  103. outState.putInt("page", 30);
  104. }
  105. }

4:Bactivity代码

[java] view plaincopy
  1. package com.example.lifecycle;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class DemoActivity extends Activity {
  5. @Override
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.demo);
  9. System.out.println("demo onCreate");
  10. }
  11. @Override
  12. public void finish() {
  13. super.finish();
  14. System.out.println("demo finish");
  15. }
  16. @Override
  17. protected void onDestroy() {
  18. super.onDestroy();
  19. System.out.println("demo onDestroy");
  20. }
  21. @Override
  22. protected void onPause() {
  23. super.onPause();
  24. System.out.println("demo onPause");
  25. }
  26. @Override
  27. protected void onRestart() {
  28. super.onRestart();
  29. System.out.println("demo onRestart");
  30. }
  31. @Override
  32. protected void onResume() {
  33. super.onResume();
  34. System.out.println("demo onResume");
  35. }
  36. @Override
  37. protected void onStart() {
  38. super.onStart();
  39. System.out.println("demo onStart");
  40. }
  41. @Override
  42. protected void onStop() {
  43. super.onStop();
  44. System.out.println("demo onStop");
  45. }
  46. }

注意onSaveInstanceState方法的作用,可以保存activity在因为异常导致销毁时候的数据,然后传给onCreate方法,在做处理,就可以避免数据的错乱,

例如 在看小说的时候切换了横竖屏,在切换的时候会调用onCreate onStart onResume 那么activity中的当前页数就丢了,用得从新开始,如果重写了onSaveInstanceState方法,把当前页放到参数bundle中,在onCreate的时候,onCreate中的参数bundle就是onSaveInstanceState方法中的bundle对象,然后判断onCreate参数bundle是否有值,如果有就取出对应的key值,如果是取出在切换前的当前页数,在判断不为空的时候 可以把页数直接定位到该页,这样就可以接着看了

在声明的activity中添加  android:configChanges="keyboardHidden|orientation" 属性 可以禁止activity在横竖屏的时候activity被重新创建或者重启,导致数据丢失,在游戏制作中尤为重要

通过设置这个属性可以使Activity捕捉设备状态变化,以下是可以被识别的内容:  
CONFIG_FONT_SCALE
CONFIG_MCC
CONFIG_MNC
CONFIG_LOCALE
CONFIG_TOUCHSCREEN
CONFIG_KEYBOARD
CONFIG_NAVIGATION
CONFIG_ORIENTATION

设置方法:将下列字段用“|”符号分隔开,例如:“locale|navigation|orientation

Value Description
“mcc“ The IMSI mobile country code (MCC) has changed — that is, a SIM hasbeen detected and updated the MCC.移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
“mnc“ The IMSI mobile network code (MNC) has changed — that is, a SIM hasbeen detected and updated the MNC.移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
“locale“ The locale has changed — for example, the user has selected a new language that text should be displayed in.用户所在地区发生变化。
“touchscreen“ The touchscreen has changed. (This should never normally happen.)
“keyboard“ The keyboard type has changed — for example, the user has plugged in an external keyboard.键盘模式发生变化,例如:用户接入外部键盘输入。
“keyboardHidden“ The keyboard accessibility has changed — for example, the user has slid the keyboard out to expose it.用户打开手机硬件键盘
“navigation“ The navigation type has changed. (This should never normally happen.)
“orientation“ The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。
“fontScale“ The font scaling factor has changed — that is, the user has selected a new global font size.全局字体大小缩放发生改变

转载于:https://www.cnblogs.com/xieyuan/p/3787343.html

android activity横竖屏切换,Activity重新创建问题解决!相关推荐

  1. android中的横竖屏切换,Android中横竖屏切换时Activity的生命周期

    Android中横竖屏切换时Activity的生命周期执行情况 1.默认情况下生命周期 (1)第一次进入界面 11-17 13:55:18.452: E/ImageListActivity(10586 ...

  2. Activity 横竖屏切换

    前言 在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函 ...

  3. android电视横竖屏切换在哪里,Android横竖屏切换总结

    之前在网上看到博客说Activity横竖屏切换的规律如下: (1)不设置android:configChanges,竖屏切换到横屏调用一次生命周期,横屏切竖屏调用两次生命周期. (2)设置 andro ...

  4. android 模拟器横竖屏切换

    android 模拟器横竖屏切换 今天在做android实验的时候,由于遇到要横竖屏切换,所以去网上找了一下这样的方法: 找到以下方法: 1.通过ctrl  +  F11  或者  ctrl  +   ...

  5. android悬浮框横竖屏切换,Activity如何管理对话框(横竖屏切换保持对话框的最佳办法)...

    在Activity中我们要保持横竖屏切换时用户的数据一般是用onSaveinstancestate的方式,dialog也是可以的,但是有更好的方法,Activity专门对dialog提供了自己的管理机 ...

  6. android的横竖屏切换,Android横竖屏切换 初步探究

    当手机横竖屏切换的时候,activity,默认会重新走一遍生命周期,即销毁当前,然后重新创建 首先,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就 ...

  7. Android 手机横竖屏切换

    竖屏与横批切换 手机有竖屏与横屏两种模式,两种屏幕方向不但造成App界面的展示差异,而且竖屏和横屏切换之际,甚至会打乱App的生命周期. 系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况 ...

  8. Android 禁止横竖屏切换、设置横屏

    <activity android:name="com.bokecc.sdk.mobile.QuestionActivity.QuestionSingleChoiceActivity& ...

  9. android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base

    横屏代码 1.配置文件设置 android:screenOrientation="landscape" 2.java代码设置 setRequestedOrientation(Act ...

最新文章

  1. UA PHYS515A 电磁理论V 电磁波与辐射9 简单辐射系统
  2. PowerShell在Exchange2010下交互式创建域用户和邮箱
  3. Truncate a table
  4. 01-几种应用上下文区别
  5. F5-yumnfsftp
  6. 进销存excel_不用再花钱买软件做进销存,这份免费的Excel系统送你,财务收
  7. java借书_用java语言实现借书系统
  8. eXosip注册函数与使用说明
  9. 苹果电脑一直密码错误_您可能一直都在犯的安全和密码错误
  10. 数据传输 | 利用 DTLE 将 MySQL 数据同步到 DBLE
  11. 两个cgi的莫名其妙的core dump问题的解决
  12. 刘禹锡最经典诗文10首,每一首都是千古名作,读懂受益一生
  13. 网络共享计算机怎么连接,电脑共享网络怎么连接
  14. core dump 1
  15. Ubuntu18.04安装WPS字体缺失的解决方案
  16. 兰州大学计算机学院研究生院导师,兰州大学研究生导师介绍:赵志光
  17. wps怎么关闭修改痕迹_如何在wps文字中将修订标记去掉
  18. 互联网快讯:阿里云发布第四代神龙架构;微信支付正式推出品牌视频号;猿辅导加速布局素质教育
  19. PEP8规范的中文版
  20. 第六届全国工业互联网数据创新应用大赛:工业生产反应装置的建模预测【天池】

热门文章

  1. compiz把xfce4系统搞崩溃后的恢复方案
  2. C++自定义直方图统计
  3. 深度学习(二十五)——Attention(2)
  4. 机器学习(二十四)——数据不平衡问题, 强化学习
  5. 【机器学习】传统目标检测算法之级联分类器Cascade
  6. JAVA月数输入24回车后变成12_Java语言程序设计(一)自考2012年10月真题
  7. javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲
  8. 无法跳转 vscode_爱了爱了,这个VSCode插件将极大提高你的工mo作yu效率
  9. 数据分析---ipython使用
  10. (原創) 如何讀取/寫入文字檔? (IC Design) (Verilog)