Activity

Activity 面试详解        
        什么是activity
            Android是于用户交互的系统,它提供一个界面让用户点击滑动操作,这个就是Activity.

    一.activity 生命周期

Activity
        
        1.activity的4种状态
        
            running / paused / stopped / killed
                running 运行状态: 当一个活动位于返回栈顶时,用户可以点击屏幕,屏幕做出相应,这时活动就处于运行状态。            
                paused 暂停状态: 当Acitvity失去焦点的时候,或者被一个非全屏的Activity占据,或者被一个透明的Activity放置在栈顶的时候,这种情况下会处于paused状态下,这个时候用户对屏幕操作时没有反应的,但不是整个Activity被销毁了,这时状态信息和成员变量都还在。当然有一种情况,内存不足的时候可能会被回收。
                stopped 停止状态:当这个Activity被另一个Activity完全覆盖,被覆盖的Activity就会处于stopped状态。这时候Activity不在是可见的了,但这时状态信息和成员变量都有可能还在。内存不足的时候可能会被回收            
                killed 销毁状态: 表明Activity被系统回收掉了,它就会处于kelled状态,这时候它所保存的成员变量和信息都会被销毁掉了。
        
        2.activity生命周期分析
        
            Activiy 启动 -> onCreate() -> onStart() -> onResume();
                onCreate():onCreate()实在Activity 被创建的时候会被第一个回调 可以在里面做一些布局,数据,图片预加载
                onstart(): onstart()表明Activity正在启动,activity处于用户可见的状态了,但让它还并没有处于前台显示,这时候用户还不能于activity进行交互,进行点击,滑动。
                onResume():onResume()表明Activity处于前台显示了,用户可以点击滑动了。 可以在onResume()方法中可以初始化一些资源。
        
            点击Home键回到主界面(Activity不可见)-> onPause() -> onstop();
                onPause():onPause()方法被回调的时候activity是停止状态的,用户可见但是不能点击,滑动操作。
                onStop(): onStop()表明整个activity被停止覆盖,这个时候Activity 是完全不可见的。它只是处于后台运行。如果整个手机内存是处于吃紧不足的话,activity 有可能会被回收掉。
                
            当我们再次回到原Activity时 -> onRestart() -> onStart -> onResume();            
                onReStart(): onReStart()方法被回调,表明activity正在重新启动,而且这个activity正在由暂停状态转换成运行状态
            
            退出当前Activity时 -> onPause() -> onStop() -> onDestroy();
                onDestroy(): onDestroy()方法表明activity被销毁,它是整个Activity生命周期中最后一个方法。在这个方法里面,我们可以做一些回收工作,以及一些资源的释放。
                
        3.android进程优先级
            
            前台 / 可见 / 服务 / 后台 / 空
                前台进程: 一般情况就是用户正在交互的activity
                可见进程: activity处于可见但是这时候不能于用户交互了
                服务进程: 就是在后台开启一个Service服务
                后台进程: 当点击home键就变成后台进程,这时候不会立马被killed掉,会根据内存情况做判断。
                空进程:   不属于其他4中进程就属于空进程。空进程表示是一组没有活跃的组建。android 系统会随时杀掉它。
    
    二.android 任务栈
    Activity
            任务栈是后进先出的。
            每次打开一个Activity或者关闭一个activity,都会在任务栈中添加删除一个activity组件。
            因此一个Start (任务栈) 其实是一个Activity组件集合。
            Android系统通过任务栈可以有序的管理每一个Activity。
            任务栈可以通过启动模式,更好的管理activity。
            在Android中当退出应用程序的时候必须要把任务栈中所有的Activity清除,这时候才能安全的完全的退出程序,任务栈只有被销毁了,才是最安全的,如果不销毁,必须和里的保存好数据。
            任务栈并不是唯一的,一个activity可能不仅一个任务栈,在某些情况下一个Activity 可以独享一个任务栈。
            
    三.activity 启动模式
            
            1.standard 系统的默认模式,一次跳转即会生成一个新的实例并加入任务栈。比较消耗资源。
            
            2.singletop 站顶复用模式。如果新activity在栈顶存在,就复用
            
            3.singlettask 站内复用模式(单例) 如果新activity在整个栈中存在,就将activity置于栈顶,并将该activity以上的所有销毁
            
            singleinstance 该activity 将独占一个task(task可以理解为进程)
    四.scheme 跳转协议  *
            
            android中scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转App中的各个页面;
            通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。