Android面试(一)Activity
来源:互联网 发布:写小说软件 mac 编辑:程序博客网 时间:2024/06/09 15:25
- Activity简介
- Activity生命周期
- Activity任务栈
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);
- Android面试(一)Activity
- Android面试(Activity生命周期)
- Android面试(一)?(内存泄露,Activity生命周期,横竖屏切换,Activity设为窗口,安全退出Activity,)
- Android Activity (一)
- Android Activity(一)
- 一 activity 面试详解
- Android面试(一)
- Android面试之Activity
- Android面试问题Activity
- Android Activity 初识(一)
- Android Activity(一)初识
- Android activity 生命周期(一)
- Android之Activity(一)
- android面试题目(一)
- android面试题目(一)
- 面试准备android(一)
- Android面试总结(一)
- Android面试踩坑记(一)
- [论文笔记]Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
- SQlite数据库的C编程接口(六) 返回值和错误码(Result Codes and Error Codes) ——《Using SQlite》读书笔记
- SpringMVC学习(二) @RequestMapping映射请求
- PAT5-38 数列求和-加强版
- SDCycleScrollView使用中遇到的问题
- Android面试(一)Activity
- LightOJ-1414-February 29--总共多少个闰日?--两种解法
- eclipse中写js,JQuery,html...的非常好用的插件
- 单链队列的建立,插入,删除,打印,销毁
- 关于事务、ThreadLocal应用、CompletionService的一些总结
- Spring框架简介
- :loading的注意选项
- SQlite数据库的C编程接口(七) 数据库锁定(Database Locking) ——《Using SQlite》读书笔记
- Android开发倒计时-CountDownTimer的使用