1.概念
Activity是Android四大组件之一,也是平时开发必不可少的一个组件,他是负责完成人机交互的一个组件,简单来说,就是app呈现给使用者或者说是用户,其实就是一个个的界面。
2.Activity的生命周期
一个完整的生命周期:
onCreate–>onStart–>onResume–>onPause–>onStop–>onDestroy
onCreate:activity被创建时调用的方法
onStart : activity可见时调用的方法
onResume:activity取得焦点时调用的方法
onPause:activity失去焦点时调用的方法
onStop:activity不可见时调用的方法
onDestory:activity销毁时调用的方法
onStart&onStop:这一组声明周期回掉方法通常可用于界面可见和不可见时刻处理的逻辑,比如当前app是一个视频播放软件,正在视频播放时突然有来电,那么来电通话过程我们不可能继续播放视频,所以我们可以利用这一对声明周期方法,在界面不可见时停止播放,在见面可见时倘若有处于暂停状态的视频则继续播放。
3.activity的横竖屏切换及禁止重走声明周期
横竖屏切换:固定横竖屏 清单文件中activity的属性中配置
android:screenOrientation="portrait" //垂直方向
或者
android:screenOrientation-"landscape" //水平方向
禁止重走生命周期:
正常情况下,如果我们进行横竖屏切换时,activity默认会冲走声明周期,为了防止当前界面已有数据被重新初始化和赋值,我们也可以通过在清单文件中配置activity的属性configChanges防止重走声明周期;
android:configChanges="orientaion|screensize|navigation|keyboardHiddel
配置该参数之后,即使切换了横竖屏,activity也不会再销毁和重建了。
4.Activity的启动模式
–standard:默认启动模式,每开启一个activity都会创建activity实例,保存在栈中。
–singleTop:单一顶部模式,每开启一个activity都会先去检查,当前开启的activity 是否位于栈顶,如果没有就创建示例,如果栈顶有就不创建实例,
–singleTask:单一任务栈,每开启一个activity,都会去检查当前任务栈中是否存在该activity的实例,如果没有就创建,如果有将跳转至该实例的对应的栈的位置,并让该位置以上的所有的activity出栈。
–singleInstance:单一实例,整个手机操作系统只有一个实例,并且单独运行在自己的任务栈中。应用场景:通话界面的activity
5.Activity跳转通用工具类的封装
package com.example.a1234.myapplication.helper;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.example.a1234.myapplication.R;
/**
* Created by 1234 on 2018/6/2.
*/
public class NavigationHelper {
/**
* start Activity方式开启activity 包含数据的传递
*/
public static void slideActivity(Activity activity, Class<?> toActivity, Bundle bundle,boolean finish){
if(bundle==null){
bundle=new Bundle();
}
startActivity(activity,toActivity,bundle,finish, R.anim.right_pull_in,R.anim.left_pull_out);
}
private static void startActivity(Activity activity,Class<?> toActivity,Bundle bundle,boolean finish,int enterAnim,int exitAnim){
Intent intent=new Intent(activity,toActivity);
if(bundle==null){
bundle=new Bundle();
}
intent.putExtras(bundle);
activity.startActivity(intent);
if(finish){
activity.finish();
}
activity.overridePendingTransition(enterAnim,exitAnim);
}
public static void startActivityForResult(Activity activity,Class<?> toActivity,Bundle bundle,int requestCode){
Intent intent=new Intent(activity,toActivity);
if(bundle==null){
bundle=new Bundle();
}
intent.putExtras(bundle);
activity.startActivityForResult(intent,requestCode);
}
public static void setData(Activity activity, Bundle bundle,int resultCode){
Intent intent=new Intent();
if(bundle==null){
bundle=new Bundle();
}
intent.putExtras(bundle);
activity.setResult(resultCode,intent);
activity.finish();
}
}