參考两篇文章: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"; @Override
protected 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);
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.e(MainActivity.class.getName(), "onRestoreInstanceState");
} @Override
protected void onStart() {
super.onStart();
Log.e(MainActivity.class.getName(), "onStart"); } @Override
protected 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")
@Override
public 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" > <Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="recreate" /> </RelativeLayout>

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

能够看到这里调用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之前使用会出现错误。例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

最新文章

  1. 读书笔记--SQL必知必会15--插入数据
  2. VBA 获取Sheet最大行
  3. 用原生js获取class
  4. 【制作镜像Win*】系统配置
  5. Sumdiv(各种数学)
  6. chrome 、 火狐等浏览器对空格符&amp;nbsp; 解析不同,页面显示不一致
  7. SVNKIT的SVNCommitClient的doMkDir的操作
  8. unity3D实际的原始视频游戏开发系列讲座10它《战斗:外来入侵》在第一季度游戏开发
  9. List container
  10. C#+HtmlAgilityPack+Dapper走一波爬虫
  11. WEB前端开发记录PS常见操作
  12. flask based on tornado
  13. Python爬虫(二)——对开封市58同城出租房数据进行分析
  14. [C#]GetFloat提示&quot;指定的转换无效&quot;
  15. JVM垃圾回收算法及分代垃圾收集器
  16. spring boot(二)web综合开发
  17. UI和View 三种控制方式
  18. flask + apidoc 生成接口文档(附加一个坑)
  19. jstack查看Java堆栈信息
  20. centos7的防火墙配置

热门文章

  1. 5.IntellijIDEA常用快捷键总结
  2. spring cloud集成 consul源码分析
  3. 【DNN 系列】 添加模块后不显示
  4. 51Nod 3的幂的和(扩展欧几里德求逆元)
  5. 空宏-标C中空宏的妙用
  6. docker for centos7
  7. 从Chrome源码看audio/video流媒体实现一(转)
  8. [POI2015]WIL-Wilcze doły(单调队列)
  9. webStrom的破解以及汉化
  10. 紫书 例题 10-22 UVa 1640(数位统计)