android屏幕旋转生命周期,Activity、Fragment生命周期---横竖屏切换的生命周期
先贴出一张大家众所周知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生命周期---横竖屏切换的生命周期相关推荐
- 你还在问android横竖屏切换的生命周期?
本文原创,转载请注明来自xiaoQLu http://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题 ...
- Android横竖屏切换的生命周期
关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次. 我本身 ...
- android横竖屏切换方法,Android横竖屏切换的生命周期
关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次. 我本身 ...
- Android零基础入门第76节:Activity数据保存和横竖屏切换
在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...
- android横竖屏切换布局闪退,Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换...
在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity 系统会杀死Activity 12-12 08:11 ...
- 【小技巧】Android SDK模拟器 增加手机内存RAM和ROM 横竖屏切换 AVD安装路
http://apps.hi.baidu.com/share/detail/34577170 新版的SDK越来越方便使用,摆脱了命令行的输入,不过命令有时解决大问题 问题一 手机内存大小扩展 RAM手 ...
- android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base
横屏代码 1.配置文件设置 android:screenOrientation="landscape" 2.java代码设置 setRequestedOrientation(Act ...
- android切换横竖,Android横竖屏切换工具
Android在横竖屏切换的时候有很多细节需要处理,尤其做视频播放的时候,下面的工具类能较完美的解决横竖屏切换场景,不管是Activity和Fragment都能灵活控制,用法简单. 1.在系统屏幕旋转 ...
- Android 屏幕旋转 全解析
屏幕旋转一般的解决方案 关于屏幕旋转这里,之前一直没太注意,因为根据设备会有指定的屏幕旋转策略如: 开发手机应用时一直使用强制竖屏布局 开发平板设备一直使用横屏布局 开发系统应用,一般给两套即横竖各一 ...
最新文章
- latex 公式转为 word 公式
- Android爬坑之旅:软键盘挡住输入框问题的终极解决方式
- nginx 域名跳转 ---IP跳转----
- read-only file system怎么改权限_“我就退出家长群!怎么了?”压垮成年人仅需一个“家长群”上热搜?...
- 〖Android〗存在多个Android设备时,使用Shell脚本选择一个Android设备
- CoreImage使用介绍
- WP7开发第一课:软件生命周期(其二)
- php可以单干吗_拉伸膜包装机适合包装牛肉干吗?
- 《21天学通C语言(第7版)》一2.5 答 疑
- 《apue》 首次拜读完经典之作,两三记录
- 失意的企业家,排队和俞敏洪做直播
- 世界在变化刷脸支付一直奋进
- Python---Excel文件xls格式转为xlsx格式
- 湿寒阳虚体质如何艾灸
- C语言----typedef(2019.5.29)
- 感恩工作平台心得体会_心得体会-感恩工作心得体会
- JSP的特点与工作流程
- 猫猫学Swift之下载-断点续传
- 新宝资讯市场最强热点
- AI 人工智能取代编剧?写剧本、模仿声音、制造笑点,机器学习进军好莱坞?!