先贴出一张大家众所周知activity流程图

onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。onStart():Activity在屏幕上对用户可见时调用,但还不可与用户交互onRestart():在activity停止后,在再次启动之前被调用。onResume():Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部,并接受用户输入。onPause():Activity被暂停时调用,也就是你要对你能看到的这个Activity说byebye的时候调用,这里可以做一些清理和保存工作onStop():Activity被停止或者Activity变成不可见时调用onDestroy():Activity被从内存中移除,一般发生在执行finish方法时或者Android回收内存的时候

预想深刻体会生命周期,得需要在实践中慢慢记忆,写个简单的demo,log出每个周期的轨迹算是基本了解吧

先看主界面布局activity_main.xml--点击button跳转到某个activity

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.screendemo.MainActivity" >

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />

android:id="@+id/button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_below="@+id/textView1"

android:text="跳转到下一个aty" />

MainActivity--主界面代码

package com.example.screendemo;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.content.res.Configuration;

import android.os.Bundle;

import android.util.AttributeSet;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

public class MainActivity extends Activity {

@Override

public void onAttachedToWindow() {

super.onAttachedToWindow();

Log.e("TAG", "onAttachedToWindow");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.e("TAG", "onCreate");

findViewById(R.id.button).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v) {

startActivity(new Intent(MainActivity.this,

SecondAty.class));

}

});

}

@Override

protected void onPostCreate(Bundle savedInstanceState) {

super.onPostCreate(savedInstanceState);

Log.e("TAG", "onPostCreate");

}

@Override

protected void onStart() {

super.onStart();

Log.e("TAG", "onStart");

}

@Override

protected void onRestart() {

super.onRestart();

Log.e("TAG", "onRestart");

}

@Override

protected void onResume() {

super.onResume();

Log.e("TAG", "onResume");

}

@Override

protected void onPostResume() {

super.onPostResume();

Log.e("TAG", "onPostResume");

}

@Override

protected void onPause() {

super.onPause();

Log.e("TAG", "onPause");

}

@Override

protected void onStop() {

super.onStop();

Log.e("TAG", "onStop");

}

@Override

protected void onDestroy() {

super.onDestroy();

Log.e("TAG", "onDestroy");

}

@Override

public void onBackPressed() {

super.onBackPressed();

Log.e("TAG", "onBackPressed");

}

@Override

public void onDetachedFromWindow() {

super.onDetachedFromWindow();

Log.e("TAG", "onDetachedFromWindow");

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

Log.e("TAG", "onRestoreInstanceState");

}

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

Log.e("TAG", "onSaveInstanceState");

}

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

Log.e("TAG", "onConfigurationChanged");

}

}SecondAty布局只有一个textView,代码直接加载布局即可---这里省略了。。。。。。

Log1、在清除缓存、杀死进程的前提下,启动项目:

Log2、启动项目后,清除Log1日志,按下回退键

Log3、启动项目后,清除Log1日志,然后回到桌面,走蓝色框---桌面启动项目,走黑色框

Log4、启动项目后,清除Log1日志,然后长按进入任务列表界面,走蓝色框---杀掉进程,走onDestroy

Log5、启动项目后,清除Log1日志,点击button进入某个Aty,走蓝色框,然后点击返回键回到主界面,走黑色框

Log6、启动项目后,清除Log1日志,锁屏走蓝色框,开屏走黑色框

基本上项目启动,回退,回到桌面,杀死线程,跳转,锁屏,开屏都测试了,大家还是在项目中慢慢记忆把

接下来看屏幕旋转,首先要在手机设置中进行设置可以进行屏幕旋转操作

1、首先在MainActivity进行属性设置,屏幕不管如何旋转,就只支持竖屏,生命周期也不会调用

android:name=".MainActivity"

android:screenOrientation="portrait"

android:label="@string/app_name" >

2、如果去掉  android:screenOrientation="portrait",旋转屏幕至横屏

再由横屏切换会竖屏幕时候

走的流程是一样的

3、加上这行属性 android:configChanges="orientation|keyboardHidden"在进行旋转屏幕--就是多了一个onConfigurationChanged

再由横屏切换会竖屏幕时候

走的流程是一样的

启动模式

singleTask"

检测要启动的这个Activity的affinity和当前任务的affinity是否相同,如果相同的话就会把它放入到现有任务当中,如果不同则会去创建一个新的任务。

如果现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创建一次它的实例,而是会直接调用它的onNewIntent()方法

注意这里我们所说的启动Activity,都指的是启动其它应用程序中的Activity,因为"singleTask"模式在默认情况下只有启动其它程序的Activity才会创建一个新的任务

"singleInstance"

这种启动模式和"singleTask"有点相似,只不过系统不会向声明成"singleInstance"的Activity所在的任务当中再添加其它Activity。也就是说,这种Activity所在的任务中始终只会有一个Activity,通过这个Activity再打开的其它Activity也会被放入到别的任务当中。

使用Intent flags

FLAG_ACTIVITY_NEW_TASK

设置了这个flag,新启动Activity就会被放置到一个新的任务当中(与"singleTask"有点类似,但不完全一样),当然这里讨论的仍然还是启动其它程序中的Activity。这个flag的作用通常是模拟一种Launcher的行为,即列出一推可以启动的东西,但启动的每一个Activity都是在运行在自己独立的任务当中的。

FLAG_ACTIVITY_SINGLE_TOP

设置了这个flag,如果要启动的Activity在当前任务中已经存在了,并且还处于栈顶的位置,那么就不会再次创建这个Activity的实例,而是直接调用它的onNewIntent()方法。这种flag和在launchMode中指定"singleTop"模式所实现的效果是一样的。

FLAG_ACTIVITY_CLEAR_TOP

设置了这个flag,如果要启动的Activity在当前任务中已经存在了,就不会再次创建这个Activity的实例,而是会把这个Activity之上的所有Activity全部关闭掉。比如说,一个任务当中有A、B、C、D四个Activity,然后D调用了startActivity()方法来启动B,并将flag指定成FLAG_ACTIVITY_CLEAR_TOP,那么此时C和D就会被关闭掉,现在返回栈中就只剩下A和B了。

finishOnTaskLaunch

这个属性和clearTaskOnLaunch是比较类似的,不过它不是作用于整个任务上的,而是作用于单个Activity上。如果某个Activity将这个属性设置成true,那么用户一旦离开了当前任务,再次返回时这个Activity就会被清除掉。

-----------------------------------------------------------------------fragment生命周期----------------------------------------------------------------------

代码默认定位到朋友界面,但是测试代码在通讯录第二个页面进行的测试。。

1 是初始化进入

2 是点击button,进入enter页面

3 是关掉enter页面,回到fragment页面

4是锁屏幕

5是开屏

6是回到桌面

7从桌面进入项目

8是启动多窗口

9是从任务列表进入

10退出

android屏幕旋转生命周期,Activity、Fragment生命周期---横竖屏切换的生命周期相关推荐

  1. 你还在问android横竖屏切换的生命周期?

    本文原创,转载请注明来自xiaoQLu http://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题 ...

  2. Android横竖屏切换的生命周期

    关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次. 我本身 ...

  3. android横竖屏切换方法,Android横竖屏切换的生命周期

    关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次. 我本身 ...

  4. Android零基础入门第76节:Activity数据保存和横竖屏切换

    在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...

  5. android横竖屏切换布局闪退,Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换...

    在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity 系统会杀死Activity 12-12 08:11 ...

  6. 【小技巧】Android SDK模拟器 增加手机内存RAM和ROM 横竖屏切换 AVD安装路

    http://apps.hi.baidu.com/share/detail/34577170 新版的SDK越来越方便使用,摆脱了命令行的输入,不过命令有时解决大问题 问题一 手机内存大小扩展 RAM手 ...

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

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

  8. android切换横竖,Android横竖屏切换工具

    Android在横竖屏切换的时候有很多细节需要处理,尤其做视频播放的时候,下面的工具类能较完美的解决横竖屏切换场景,不管是Activity和Fragment都能灵活控制,用法简单. 1.在系统屏幕旋转 ...

  9. Android 屏幕旋转 全解析

    屏幕旋转一般的解决方案 关于屏幕旋转这里,之前一直没太注意,因为根据设备会有指定的屏幕旋转策略如: 开发手机应用时一直使用强制竖屏布局 开发平板设备一直使用横屏布局 开发系统应用,一般给两套即横竖各一 ...

最新文章

  1. latex 公式转为 word 公式
  2. Android爬坑之旅:软键盘挡住输入框问题的终极解决方式
  3. nginx 域名跳转 ---IP跳转----
  4. read-only file system怎么改权限_“我就退出家长群!怎么了?”压垮成年人仅需一个“家长群”上热搜?...
  5. 〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备
  6. CoreImage使用介绍
  7. WP7开发第一课:软件生命周期(其二)
  8. php可以单干吗_拉伸膜包装机适合包装牛肉干吗?
  9. 《21天学通C语言(第7版)》一2.5 答 疑
  10. 《apue》 首次拜读完经典之作,两三记录
  11. 失意的企业家,排队和俞敏洪做直播
  12. 世界在变化刷脸支付一直奋进
  13. Python---Excel文件xls格式转为xlsx格式
  14. 湿寒阳虚体质如何艾灸
  15. C语言----typedef(2019.5.29)
  16. 感恩工作平台心得体会_心得体会-感恩工作心得体会
  17. JSP的特点与工作流程
  18. 猫猫学Swift之下载-断点续传
  19. 新宝资讯市场最强热点
  20. AI 人工智能取代编剧?写剧本、模仿声音、制造笑点,机器学习进军好莱坞?!

热门文章

  1. VUE+ElementUI+SheetJS解析Excel
  2. 虚幻动画 | 让角色动起来,实现一个简易的走、跑、跳状态机
  3. 春晚小宫女唐奕霖 网友封为最美的年轻董事长
  4. Python鼠标模拟
  5. ChunJun 1.16 Release版本即将发布,bug 捉虫活动邀您参与!
  6. tansig、logsig公式与导数推导
  7. ffmpeg 命令的使用
  8. 俄罗斯方块游戏系统-c语言版
  9. 用PHP+MYSQL写一个完整的登录界面
  10. OpenLayers标记地图点及点击地图点显示自定义弹出框