參考两篇文章:http://blog.csdn.net/watermusicyes/article/details/47392949

http://blog.csdn.net/droyon/article/details/21275797

recreate能够使用在日间/夜间模式的切换,那么调用recreate()函数将会运行哪些方法呢?

代码:

public class MainActivity extends FragmentActivity implements OnClickListener {private Button btn;private int mTheme;private String THEME = "theme";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (savedInstanceState != null) {mTheme = savedInstanceState.getInt(THEME);switchTheme(mTheme);}setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);Log.e(MainActivity.class.getName(), "onCreate");}@Override  protected void onSaveInstanceState(Bundle savedInstanceState) {  super.onSaveInstanceState(savedInstanceState);  Log.e(MainActivity.class.getName(), "onSaveInstanceState");savedInstanceState.putInt(THEME, mTheme);} @Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);Log.e(MainActivity.class.getName(), "onRestoreInstanceState");}@Overrideprotected void onStart() {super.onStart();Log.e(MainActivity.class.getName(), "onStart");}@Overrideprotected void onResume() {super.onResume();Log.e(MainActivity.class.getName(), "onResume");}private void switchTheme(int theme) {switch (mTheme) {case android.R.style.Theme_Holo_Light:mTheme = android.R.style.Theme_Black_NoTitleBar;break;case android.R.style.Theme_Black_NoTitleBar:mTheme = android.R.style.Theme_Holo_Light;break;default:mTheme = android.R.style.Theme_Holo_Light;break;}setTheme(mTheme);}@SuppressLint("NewApi")@Overridepublic void onClick(View v) {recreate();}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.testandroid.MainActivity" ><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="recreate" /></RelativeLayout>

点击recreatebutton能够看到打印相关的信息:

能够看到这里调用recreate方法会比正常启动Activity多调用了onSaveInstanceState和onRestoreInstanceState。而且onSaveInstanceState在onCreate方法之前调用。

注意:(1)

if (savedInstanceState != null) {mTheme = savedInstanceState.getInt(THEME);switchTheme(mTheme);}

这部分代码要在setContentView(R.layout.activity_main)代码之前调用,否则改变不了主题。

(2)recreate()方法是在Android3.0引入的,所以假设在3.0之前使用会出现错误。例如以下图所看到的:

转载于:https://www.cnblogs.com/llguanli/p/8406411.html

Activity中recreate方法的应用相关推荐

  1. activity中onResume方法详解

    onResume 比如做一个音乐播放程序,在播放过程中,突然有电话打进来了,这时系统自动调出电话,而你的音乐播放程序置于后台,触发了onPause方法.当你电话结束后,关闭电话,又自动回到音乐播放程序 ...

  2. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

    Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...

  3. activity中fragment 返回键不退出_分享一波阿里Android客户端面经,我竟连这都答不上来?...

    今天整理了电脑,发现了几个月前总结了一半的阿里面经,想起来了去年秋招不愉快的阿里一面,今天分享给大家.希望大家前事不忘后事之师,吸取经验教训. 一面(挂) 1.点击图标,应用打开,点击home键,重新 ...

  4. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  5. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )

    文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  6. 【Android】Intent介绍及Intent在Activity中的使用方法

    本篇博文主要介绍Intent的相关概念,以及Intent在Activity中的使用方法. 1.Intent的实现过程 在Android中,Intent不仅可用于应用程序之间的交互,也可用于应用程序内部 ...

  7. android 退出多个activity,Android 中 退出多个activity的经典方法

    1.使用list集合方式 用list保存activity实例,然后逐一干掉 import java.util.linkedlist; import java.util.list; import and ...

  8. Intent介绍及Intent在Activity中的使用方法

    1.Intent的实现过程 在Android中,Intent不仅可用于应用程序之间的交互,也可用于应用程序内部的Activity/Service之间的交互. Intent负责对应用中一次操作进行描述, ...

  9. 解析Activity中的onCreate方法

    我们在写一个自己的Activity的时候需要注意: 1.都必须extends Activity(或者其子类): 2.必须在方法onCreate中存在一条这样的语句:super.onCreate(也就是 ...

最新文章

  1. C#命名规则、开发习惯和风格
  2. iOS UICollectionView 使用
  3. php header运用细节
  4. 怎么给域账号映射服务器,如何给每个域用户映射网络驱动器?
  5. 右击菜单一键优化(增加新建office2003、新建reg和bat,删除新建公文包、新建wps、新建rar)...
  6. 容器编排技术 -- Kubernetes 组件
  7. 如何快速打通 Docker 镜像发布流程?
  8. Codeforces976D Degree Set 【构造】
  9. ACDSee技巧 - 1
  10. rtnetlink组数量与设置
  11. php安装ziparchive扩展,记一次PHP扩展-ZipArchive安装
  12. 解决Win10磁盘占用100%
  13. ios模拟器装ipa包_给iOS 模拟器“安装”app文件
  14. java在线编辑word_java web实现在线编辑word,并将word导出(一)
  15. 创建maven项目时添加自定义property属性
  16. 华为手机安装debug的apk时出现无效安装和与操作系统不兼容问题解决
  17. 王家林人工智能AI第15课:通过SVM进一步改进在Social Network上销售汽车推荐系统的精准性 老师微信13928463918
  18. 校验18位身份证号码的正确性
  19. 吴恩达《构建机器学习项目》精炼笔记(2)-- 机器学习策略(下)
  20. PS操作01 - PS切手机图标 + Android.9.png图片制作

热门文章

  1. 做自媒体必备的6个免费网站,提高工作效率,丰富见识
  2. vin码对应的真实数据内容查询
  3. 低价位高性价比keychron机器键盘推荐
  4. APM的L1制导算法改装思路
  5. 曾“伪造”Solana七成TVL的“多重人格者”,正望向Aptos
  6. 最新 OKR 优秀案例集(建议收藏)
  7. 2020科研方法论答案
  8. win7 xp双系统启动引导修复指令
  9. 【男性身材计算】胸围=身高*0.48(如:身高175cm的标准胸围=175cm*0.61=84cm);腰围=身高*0.47(如:身高175c… - 李峥 - 价值中国网...
  10. [Window] Windows批处理(cmd/bat)常用命令小结