Android 四大组件之一activity 通信方式及其启动模式

四大组件之一activity

  • 生命周期
  • Activity组件之间的通信
  • 启动模式
  • 源码解读 startActivity

Activity4中形态

  • Active: Activity 处于栈顶
  • Paused: 可见但是不可交互
  • Stopped: 不可见
  • Killed: 系统回收

    Activity是与用户交互的接口
    Android系统通过activity栈的形式来管理activity
    Active/Paused/Stopped/Killed
    

Activity生命周期

  1. onCreate()
  2. onStart() // 处于可见状态 但是不能交互
  3. onResume() //activity处于可见 并且可以交互
  4. onPause()
  5. onStop()
  6. onDestroy()
  7. onRestart() // 正常启动情况下不会执行此方法

Activity异常情况下生命周期&

出现异常会自动调用
1. onSaveInstanceState()  //存储数据
2. onRestoreInstanceState()// 数据恢复  

onCreate 和 onRestoreInstanceState区别
onCreate 需要判断Bundle是否为空
onRestoreInstanceState 不需要判断Bundle是否为空

Activity之间的通信

  1. Intent/Bundle
  2. 类静态变量
  3. 全局变量

Activity与Fragment通信

1. Bundle
2. 直接在Activity中定义方法

setArguments()
getAtguments()
Fragment 在onAttach方法中直接调用activity方法获取数据 

Fragment与activity通信

Fragment将数据传递给activity

1. 在fragment中定义一个内部接口
2. fragment的方法onAttach()
3. 调用onDetach()这个时候要   把传递进来的activity对象释放掉

Activity与service之间通信

1. 绑定服务 利用serviceConnection类
2. 简单通信 利用intent进行船只
3. 定义一个callback接口来监听服务中的进程的变化

Activity启动模式

standard
singleTop 
singleTask
singleInstance


standard   标准模式
1. 在不指定启动模式的前提下 系统默认使用的事该模式启动Activity
2. 每次启动一个activity都会重新创建一个新的实例
3. Activity它的onCreate onStart onResume方法每次都会执行


singleTop   栈顶复用
1. 当前栈中已有该activity实例并且该实例位于栈顶时 并且传入intent调用 onNewIntent 方法会被调用
2. 当前栈中已有该activity实例但是该实例不在栈顶时 和标准的启动一样
3. 当前栈中不存在该activity实例   和标准的启动一样

singleTop 应用场景
IM对话框
新闻客户端推送



SingleTask  栈内复用模式
1. 首先会根据taskAffinity 去寻找当前是否存在一个对应名字的任务栈    (taskAffinity   任务相关性)
2. 如果不存在 则会创建一个新的task   activity实例会加入这个栈
3. 如果存在 则得到该任务栈 查找该任务栈中是否存在该activity实例   (会将这个实例上方的activity全部移除栈)

SingleTask 应用场景 
应用的主界面




SingleInstance   独立的任务栈 整个内存中只有一个实例  多个app共享一个实例
SingleInstance 特性
1. 以SingleInstance模式启动的activity具有全局唯一性
2. 如果再启动这样的activity时,已经存在一个实例 会复用这个实例
3. 以 SingleInstance模式启动的activity 具有独占性  独自占用一个任务栈
SingleInstance 应用场景
呼叫来电 
发布了8 篇原创文章 · 获赞 3 · 访问量 970

猜你喜欢

转载自blog.csdn.net/flying0916/article/details/98877918