Android 启动优化
对与Android的项目来说,app的启动速度是非常重要的。因为用户打开你的app给别人的第一体验就是打开软件的速度。但是app的启动速度是比较难以缩短的,因为一般来说开发者在app的启动入口都会创建一些比较耗时的操作,比方说使用SharedPreferences,初始化一些第三方的类库还有进行网络请求的判断。关于启动的优化可以分为两个方向来进行。第一:使用多线程充分利用好cup的运行效率提高运行时的速度;第二:使用延迟加载的方式将不重要的一些耗时的操作放到界面显示之后在做。
第一点使用异步方法加快启动时的速度。首先还是重写Application方法在onCreate方法里面初始化,然后建立一个手机核数对于的线程池,在线程池里面异步的加载耗时的操作。这样就可以进行异步的加载方式
//手机的核数
final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
final int CORE_POOL_SIZE = Math.max(2,Math.min(CPU_COUNT-1,4));
//优化启动方式
//异步方式创建线程池
ExecutorService service = Executors.newFixedThreadPool(CORE_POOL_SIZE); //将初始化操作放到线程池里面去
service.submit(new Runnable() {
@Override
public void run() {
initA();
}
}); service.submit(new Runnable() {
@Override
public void run() {
initB();
}
}); service.submit(new Runnable() {
@Override
public void run() {
initC();
}
});
但是这样的加载方式还是存在者问题,由于这些都是异步加载的内容所有不知道这些初始化到底什么时候完成,所以可能还是需要进行一些处理。比方说我们的App一开始就需要这个初始化的数据但是在主线程调用的时候并没有初始化完,在这个时候就可能产生异常,有的必须在Application里面初始化成功才有作用。所以可以使用CountDownLatch。
首先初始化一个CountDownLatch后,在异步进程的最后调用await方法等待里面的进程countDown,这样就可以保证我们想要的进程一定可以执行完
private CountDownLatch mCountDownLatch = new CountDownLatch(1);
mCountDownLatch.countDown();
mCountDownLatch.await();
private CountDownLatch mCountDownLatch = new CountDownLatch(1);
//手机的核数
final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
final int CORE_POOL_SIZE = Math.max(2,Math.min(CPU_COUNT-1,4));
onCreate里面的方法
//异步方式创建线程池
ExecutorService service = Executors.newFixedThreadPool(CORE_POOL_SIZE);
//将初始化操作放到线程池里面去
service.submit(new Runnable() {
@Override
public void run() {
//初始化的方法
initA();
mCountDownLatch.countDown();
}
});
service.submit(new Runnable() {
@Override
public void run() {
initB();
}
});
service.submit(new Runnable() {
@Override
public void run() {
initC();
}
});
try {
//等待完成之后就会完成的
mCountDownLatch.await();
}catch (Exception e){
e.printStackTrace();
}
如上面的代码所示除非initA方法执行完毕之后才会继续向下执行。
第二点使用延迟加载的方式将不重要的一些耗时的操作放到界面显示之后在做
我们可以先观察把一些一开始非必要的内容在MainActivity显示后进行初始化,在界面成功显示之后使用Handler进行延迟的初始化。
new Handler().postDelayed(new Runnable(){
public void run() {
//进行初始化
}
}, 2000);
Android 启动优化的更多相关文章
- android启动优化
############################################## # power on till android lock screen comes up # # get ...
- Android性能优化之App应用启动分析与优化
前言: 昨晚新版本终于发布了,但是还是记得有测试反馈app启动好长时间也没进入app主页,所以今天准备加个班总结一下App启动那些事! app的启动方式: 1.)冷启动 当启动应用时,后台没 ...
- Android内核开发:系统启动速度优化-Android OS启动优化(转)
Android系统的启动优化主要分为三大部分: (1) Bootloader优化 (2) Linux Kernel的剪裁与优化 (3) Android OS部分的剪裁与优化 本文重点关注Android ...
- Android性能优化(一)之启动加速35%
一.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优 ...
- Android性能优化系列之App启动优化
Android性能优化系列之布局优化 Android性能优化系列之内存优化 Android性能优化系列之apk瘦身 应用的启动速度缓慢是我们在开发过程中常常会遇到的问题,比方启动缓慢导致的黑屏.白屏问 ...
- Android 项目优化(五):应用启动优化
介绍了前面的优化的方案后,这里我们在针对应用的启动优化做一下讲解和说明. 一.App启动概述 一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意 ...
- Android 性能优化 ---- 启动优化
Android 性能优化 ---- 启动优化 1.为什么要进行启动优化 一款应用的第一印象很重要,第一印象往往决定了用户的去留.打开一款应用,如果速度很快,很顺畅,那么很容易让人觉得这款应用背后的技术 ...
- 【腾讯Bugly干货分享】Android性能优化典范——第6季
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ...
- android 性能优化
本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...
随机推荐
- linux dialog详解(图形化shell)
liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具.每个对话框提供的输出有两种形式: 1. 将所有输出到stderr 输出,不显示到屏幕. 2 ...
- 初识函数库libpcap
由于工作上的需要,最近简单学习了抓包函数库libpcap,顺便记下笔记,方便以后查看 一.libpcap简介 libpcap(Packet Capture Library),即数据包捕获函数库, ...
- 解决fatal error LNK1168的终极方法
很多人的VC++或Visual studio 会出现fatal error LNK1168错误很是头疼,MS也说不清, 什么改权限.用户名.注册表.CMD,卸载杀毒软件...一切都瞎扯,除非reins ...
- Android/Linux Thermal Governor之IPA分析与使用
IPA(Intelligent Power Allocator)模型的核心是利用PID控制器,Thermal Zone的温度作为输入,可分配功耗值作为输出,调节Allocator的频率和电压值. 由P ...
- linux编译安装时常见错误解决办法
This article is post on https://coderwall.com/p/ggmpfa 原文链接:http://www.bkjia.com/PHPjc/1008013.html ...
- 第二章——机器学习项目完整案例(End-to-End Machine Learning Project)
本章通过一个例子,介绍机器学习的整个流程. 2.1 使用真实数据集练手(Working with Real Data) 国外一些获取数据的网站: Popular open data repositor ...
- Reactor模式的.net版本简单实现--DEMO
近期在学习DotNetty,遇到不少的问题.由于dotnetty是次netty的.net版本的实现.导致在网上叙述dotnetty的原理,以及实现技巧方面的东西较少,这还是十分恼人的.在此建议学习和使 ...
- sql server 高可用故障转移(6)
创建分布式事务处理DTC群集服务 在hsr3 ip 49上继续 \ 输入一个没有冲突的ip地址用作SQL-CL的DTC解析地址:192.168.2.110,通过检测后会在DNS服务器中自动创建一条记录 ...
- 12.app后端如何选择合适的数据库产品
app后端的开发中,经常要面临的一个问题是:数据放在哪里? mysql ?redis?mongodb? 现在有这么多优秀的开源数据库产品,怎么根据业务场景来选择合适的数据? 常用的数据库产品的优缺点又 ...
- python assert的作用
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...