700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android屏幕旋转生命周期 Activity Fragment生命周期---横竖屏切换的生命周期

android屏幕旋转生命周期 Activity Fragment生命周期---横竖屏切换的生命周期

时间:2023-05-06 05:27:53

相关推荐

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="/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退出

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。