<h2 align = "center">电话应用热启动用户体验优化</h2>
热启动定义:在最底层Activity,点击返回按钮;Activity消失后,点击桌面图标或者从最近任务中打开,应用MainActivity重新启动,这次启动属于热启动。
点击返回按钮,默认会触发Activity的finish操作,但是不会杀掉进程。所以应用热启动时间,可以认为是创建第一个Activity的时间。加快MainActivity的创建和显示,就是热启动优化的核心。
1. 对比其他厂商样机和第三方App
- 其他样机,如小米、魅族,在电话应用的最底层Activity,点击返回按钮,没有触发Activity的finish。
- 第三方App,如微信、QQ,在应用首Activity,点击返回按钮,也没有触发Activity的finish。
- 可以推测,上述应用,都对Back键的逻辑进行了改写,按Back键和Home的逻辑差不多,仅仅是将应用切换到后台,并不会销毁Activity。
2. 电话应用使用上述办法优化热启动前后对比
将电话最底层Activity的返回按钮逻辑,修改成和home一样时的内存变化如下。
1) 修改前
按Back退出应用
点击桌面图标启动应用
2) 修改后
按Back退出应用
点击桌面图标启动应用
从上述现象可以得出:电话的主界面Activity锁占据的内存不大,大概1~2M左右。修改后,点击back和重新打开,应用稳定后内存几乎没变化。所以在用户点击Back按钮时,完全可以保留该Activity,达到快速热启动的目的。
3. 具体实现
0.
代码实现如下
@Override
public void onBackPressed() {
if (!moveTaskToBack(true)) {
super.onBackPressed();
}
}
1.
Android本身的设计,就是允许App自定义Back的行为的,所以,理论上所有类型的App都可以采用该方案优化。
2.
主界面占据内存比较少的应用可以直接添加代码对应代码即可
3.
对于在首界面占用内存资源比较多的应用,应该检查Activity 和 Fragment 的 destroy 方法,将释放资源的操作移动到 pause 或 stop,然后再检查create方法,将加载资源操作移动到 resume 或 start 。
网友评论