Android面试(一)Activity

  1. Activity简介
  2. Activity生命周期
  3. Activity任务栈
  4. Activity起动

Activity简介

Activity是android四大组件之一,用来实现人机交互和UI的展示

Activity生命周期

不会生命周期还如何开发android程序(小伙伴一定要熟记)


Android面试(一)Activity_第1张图片
这里写图片描述
**从创建到展示**
onCreate --> onStart --> onResume
**从运行到销毁**
onPause-->onStop-->onDestory
**从运行到不可见**
onPause-->onStop
**从不可见到可见**
onStop-->onRestart-->onStart-->onResume

详细介绍

onCreate --> Activity创建时执行此方法只执行一次
onStart-->当界面可见时执行此方法但不可操作
onResume -> 界面即可见也可操作
onPause -->界面可见但不可操作
onStop -->界面不可见
onDestroy -->Activity销毁时
onRestart --> 当界面再次从不可见到可见时调用的第一个生命周期


每个生命周期都做可以做哪些事情?
(要想回答这个问题就得看看两个activity之间跳转时的生命周期是如何走的
看一下这个起动第一个mainActivity后起动secondActivity生命周期)

点击起动mainActivity

com.atguigu.myapplication E/aaa: onCreate: mainActivity

com.atguigu.myapplication E/aaa: onStart: mainActivity

com.atguigu.myapplication E/aaa: onResume: mainActivity

点击起动secondActivity

com.atguigu.myapplication E/aaa: onPause: mainActivity

com.atguigu.myapplication E/aaa: onCreate: secondActivity

com.atguigu.myapplication E/aaa: onStart: secondActivity

com.atguigu.myapplication E/aaa: onResume: secondActivity

com.atguigu.myapplication E/aaa: onStop: mainActivity


注意 :可以清楚的看到当从mainActivity起动SecondActivity时
mainActivity生命周期先onPause,
等SecondActivity起动起来再执行onStop


onPause中一定不能做耗时操作否则Seconde起动时发生卡顿
onStop这个时候是比较适合操作耗时操作的因为第二个界面都起来了
onPause/onResume :可以做一些轻量级的任务比如 动画开启关闭 视频开启关闭
onCreate :只创建一次那么可以做一些控件的初始化等
onDestory : 销毁一些控件 释放内存




  1. 你后台的Activity被系统 回收怎么办?

            除了在栈顶的activity,其他的activity都可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.
    

    onSaveInstanceState这个方法只会发生在Activity异常终止的情况下 调用在 onPause()或 onStop前

    onRestoreInstanceState 这个方法调用在再次被创建的时候

    onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,

    而不应该用来保存持久化数据,持久化数据应该当用户离开当前的 activity时,

    在 onPause() 中保存(比如将数据保存到数据库或文件中)。

    说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据。

Acitivity任务栈

1.standard 默认标准的启动模式, 每次startActivity都是创建一个新的activity的实例。适用于绝大大数情况

  1. singleTop 单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。应用场景: 浏览器书签。 避免栈顶的activity被重复的创建,解决用户体验问题。

  2. singletask 单一任务栈 , activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity应用场景:浏览器activity, 整个任务栈只有一个实例,节约内存和cpu的目的 注意: activity还是运行在当前应用程序的任务栈里面的。不会创建新的任务栈。

  3. singleInstance 单态 单例模式单一实例,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity共享 公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。应用场景:呼叫来电界面 InCallScreen




    如何安全退出已调用多个Activity?
    --建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity
    --发送特定广播:通过在BaseActivity中注册一个广播,当退出时发送一个广播,finish退出
    --通过直接杀死当前应用的进程来结束应用,简单粗暴
    --利用Activity的起动模式
    1、在HomeActivity注册一个退出广播,和第二个广播式一样,但是这里只需要在HomeActivity一个页面注册即可。
    2、设置HomeActivity的启动模式为singleTask。

使用Sechem起动Activity

这种方式在h5互调和消息通知用的比较多

  
           
         
            
         
           
  

Uri uri=Uri.parse("app://test");  
Intent intent=new Intent(Intent.ACTION_VIEW,uri);  
startActivity(intent); 

你可能感兴趣的:(Android面试(一)Activity)