一、 Android基础知识
Android生命周期
1、完整生命周期
Activity的基本生命周期如下所示:
public class MyActivity extends Activity {
protected void onCreate(BundlesavedInstanceState);
protected void onStart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
你自己写的Activity会按需要重载这些方法,onCreate是免不了的:
- 在一个Activity正常启动的过程中,他们被调用的顺序是
onCreate -> onStart -> onResume
- 在Activity被干掉的时候顺序是
onPause-> onStop -> onDestroy
这就是一个完整的生命周期
但如果程序正运行着呢来电话了,这个程序咋办?中止!具体分两种情况:
- 如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop,恢复的时候onRestart->onStart->onResume
- 如果打断这个应用程序的是一个Theme为Translucent(半透明)或者Dialog的Activity那么只是:onPause,恢复的时候onResume.
2、具体方法介绍
onCreate:创建界面,做一些数据的初始化工作
onStart:可见不可交互
onResume:可交互的,(在activity栈系统通过栈的方式管理这些个
Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause:可见不可交互,系统会停止动画等消耗CPU的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回.在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动
onStop: 变得不可见,被下一个activity覆盖了
onRestart:当处于停止状态的活动需要再次展现给用户的时候,触发该方法
onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个ProgressDialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的.
onPause,onStop, onDestroy,三种状态 下activity都有可能被系统干掉
3. 内存回收
1、概念
Android 之所以采用特殊的资源管理机制,原因在于其设计之初就是面向移动终端,所有可用的内存仅限于系统 RAM,必须针对这种限制设计相应的优化方案.
当 Android 应用程序退出时,并不清理其所占用的内存;Linux 内核进程也相应的继续存在,所谓“退出但不关闭”.从而使得用户调用程序时能够在第一时间得到响应.
当系统内存不足时,系统将激活内存回收
2、回收过程
一个Android 程序的进程是何时被系统结束的呢?通俗地说,一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性层次”选出来的“牺牲品”.一个进程的重要性是根据其中运行的部件和部件的状态决定的.各种进程按照重要性从高到低排列如下(回收顺序相反):
- 前台进程——这样的进程拥有一个在屏幕上显示并和用户交互的activity或者它的一个 IntentReciver正在运行.这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束.
- 可见进程——在屏幕上显示,但是不在前台的程序.比如一个前台进程以对话框的形式显示在该进程前面.这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束.
- 服务进程——这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等.这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束.
- 后台进程——这样的程序拥有一个用户不可见的activity.这样的程序在系统内存不足时,按照LRU(Least Recently Used)的顺序被结束.
- 空进程——这样的进程不包含任何活动的程序部件.系统可能随时关闭这类进程.
4. 响应能力(ANR)
应用程序无响应——Application No Response
何时会ANR:
- 点击事件或按键事件5秒钟无响应;
- onReceive()到Broadcast消息后10秒钟没有处理返回
5. 较典型Crash场景
- 无法解析intent导致crash——卸载自带浏览器,激活程序网络访问功能,如分享、点赞、搜索、打开链接
- 小内存手机,扫描大体量SD卡——如包含5G以上各种垃圾,执行扫描,可能出现OOM(Out Of Memory)类型crash
- 某些场景下的扫描数字快速跳动crash——同样是小内存手机OOM
- 点击程序图标,启动过程中连续点击back键crash——某些方法初始化失败导致crash
- 空指针导致crash
二、 自动化测试——Monkey
1. Monkey测试简介
Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等随机操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常
1. Monkey程序介绍
- Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
- jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey
然后通过在cmd中执行: adb shell monkey +command来进行Monkey测试
也可以先adb shell进入系统,之后只需执行monkey+command,如图:
注意:Monkey测试是推送命令到手机执行!
即一旦开始执行命令ÿ