从瓶颈到精通——Android四大组件:Activity

来源:互联网 发布:linux凝思重启网卡命令 编辑:程序博客网 时间:2024/06/05 04:00

今天开始,每天不定期写关于Android从瓶颈到进阶的文章。
主要是挖掘一些不常用的API,或者是不常用到的开发技能等等,做一个汇总,总结中摸索提高技能。

说到Activity,必须掌握的Activity的生命周期、生命周期含义、启动模式、内存回收处理,Activity创建过程这里暂时不做讲解记录

生命周期

这里写图片描述
1.onCreate:Activity开始创建,这时还不可见,可做View的渲染,数据加载初始化等操作。
2.onStart:Activity开始启动,仍不可见
3.onRestart:这里表示当前Activity从不见状态重新恢复时调用
4.onResume:表示已经创建完成,此时Activity已经可见
5.onPause:此时Activity被覆盖(失去焦点),处于暂停状态。(PS:如果覆盖的Activity是透明主题,则前一个Activity不会onPause)
6.onStop:表示当前Activity已经处于停止状态,已经完全不可见,这时可做一些重量级回收工作(因为新建一个Activity时旧的Activity必须在onStop后才能启动新的Activity,如果回收工作不放在这里,则会影响下一个Activity的启动速度)
7.onDestory:当一个Activity走到这里时,也就代表即将被销毁

以上情况是正常情况下的Activity启动流程
非正常情况下又有哪些注意事项呢?

Android的内存回收机制是根据进程的优先等级进行判断的,当手机的运行内存紧张时,回收工作会从当前所有进程中选择进程等级最低的开始回收,这时有一个放在后台(onStop的Activity)很久的应用,那么回收一定会从它开始(虚拟机:我能怎么办?我也很无奈啊!),回收时唯一能补偿一点就是会调用当前Activity的onSaveInstanceState函数。我们可以在这里的Bundle中记录一些需要被保存的数据。
当重新启动这个Activity时可以从onCreate中拿到保存的Bundle数据(ps:这里并不是任何时候都可以拿到,当用户手动清理这个app进程时,保存的Bundle随之回收)

dispatchTouchEvent()

什么?这不是view中的函数吗,Activity这里也有是几个意思呢
Activity说白了就是一个Window和ContentView两者之间的控制器,既然是控制器就一定需要传递事件给ContentView,所以这里的dispatchTouchEvent()还是传递到了View之中,不必大惊小怪了

关于键盘的监听
关于键盘和软件盘的监听一直是个老生常谈的问题,总有人提问:如何监听XXX键?
今天就来讲个明白
在KeyEvent类中,声明了很多键盘值的常量,(abcdefg…12345..上下左右..空格Ctrl等),总之键盘的按键都有了,当然也不会少了手机上的back,home,menu等键了
Activity中有这么一个函数:onKeyDown(int keyCode, KeyEvent event)
keyCode就是代表当前按下的keyCode,只需要做一个if判断就好了

原创粉丝点击