Android面试(一)Activity

来源:互联网 发布:写小说软件 mac 编辑:程序博客网 时间:2024/06/09 15:25
  1. Activity简介
  2. Activity生命周期
  3. Activity任务栈
  4. Activity起动

    Activity简介

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

    Activity生命周期

    不会生命周期还如何开发android程序(小伙伴一定要熟记)
    这里写图片描述

    从创建到展示
    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的实例。适用于绝大大数情况

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

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

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


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

使用Sechem起动Activity

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

<intent-filter>         <action android:name="android.intent.action.VIEW"></action>           <category android:name="android.intent.category.DEFAULT"></category>         <category android:name="android.intent.category.BROWSABLE"></category>            <data              android:scheme="app"              android:host="test">         </data>    </intent-filter>  Uri uri=Uri.parse("app://test");  Intent intent=new Intent(Intent.ACTION_VIEW,uri);  startActivity(intent); 
阅读全文
0 0
原创粉丝点击