Android Notes(Activity)

Activity,Activity调用栈

  • onCreate 创建基本元素
  • 初始化资源,或在onPause中释放的资源
  • onPause/onStop 清除Activity资源,camera,sensor,receivers
  • onDestory 清除线程
  • activity 在onSaveInstanceState()保存状态到Bundle,在onRestoreInstanceState(),onCreate()恢复状态Bundle,已经默认实项了控件的状态保存
    • Activity任务栈
    • 栈底元素是整个任务栈发起者
    • 一个任务栈Task,表示若干个Activity集合,可以来自不同的App,一个App的Activity也可以在不同的Task中
    • LIFO 后进先出
    • 启动模式launchmode
    • standard
      默认启动模式,每次都会创建新的实例
    • singleTop
      栈顶模式,如果栈顶是要启动的Activity,直接引用,如果不是创建新的Activity,例如qq接受多条消息,弹出的消息界面
    • singleTask
      单栈模式,要启动的Activity,如果栈中存在该Activity,将其置于栈顶,并将位于上方的Activity销毁,指同一个App中启动它的Activity,如果其他App以singleTask模式启动这个Activity,将会创建新的Activity。但是如果启动的Activity已经在一个任务栈中处于后台,那所在的任务栈会和要启动的Activity一起回到前台,当已经启动的Activity需要按返回键时,就会先返回Activity所在栈的元素
      应用:将主Activity设置为singleTask,然后在要退出的Activity中启动主Activity,将他之上的Activity全部销毁,重写onNewIntent(),加上finish(),将最后一个主Activity结束
    • singleInstanse
      栈中只存在该一个Activity,共享实例,不需要重新创建,类似浏览器,电话

注意:singleTop或singleInstance的Activity A通过startActivityForResult()启动另一个Activity B,直接返回Activity.RESULT_CANCELD ,只能通过Intent绑定数据

  • Intent Flag
    • Intent.FLAG_ACTIVITY_NEW_TASK 启动的Activity在新的Task中,使用在Service中启动Activity,因为Service没有任务栈
    • Intent.FLAG_ACTIVITY_SINGLE_TOP 存在直接引用,不存在创建新的
    • Intent.FLAG_ACTIVITY_CLEAR_TOP 与singleTask相同,存在引用并销毁,不存在创建新的
    • Intent.FLAG_ACTIVITY_NO_HISTORY 以这种模式启动的Activity C会消失,A->B->C->D,当前Activity栈中为ABD
  • 清空任务栈
    • clearTaskOnTouch 每次返回该Activity 清除其他Activity,初始化Task,只有一个该Activity
    • finishOnTaskLaunch 返回该Activity时,会被finish
    • alwaysRetainTaskState 保持当前Task状态,不接受任何清理命令
willkernel wechat
关注微信公众号
帅哥美女们,请赐予我力量吧!