开发Android应用中,随着功能越来越多,启动速度越来越慢。有没有办法让自己应用启动速度快一点呢?
方法是人想出来的。先说说我的实现方法:
1 将onCreate 中初始化的内容,移动到线程中做初始化,加载等
2 初始化完成之后,通过Handler发送消息,
3 Hander 中收到消息后,再初始化完整界面。
1 public class MainActivity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); //设置layout布居 7 8 // 使用线程异步加载数据,不阻塞界面。 9 new Thread(){ 10 11 @Override 12 public void run() { 13 // TODO Auto-generated method stub 14 super.run(); 15 initData(); 16 } 17 18 }.start(); 19 } 20 21 private final static int MSG_INIT_VIEW = 0xA00; 22 private final Handler handler = new Handler() { 23 24 @Override 25 public void dispatchMessage(Message msg) { 26 switch (msg.what) { 27 case MSG_INIT_VIEW: 28 initView(); 29 break; 30 default: 31 super.dispatchMessage(msg); 32 } 33 34 35 } 36 37 }; 38 39 private void initData(){ 40 try { 41 Thread.sleep(5000);// 模拟加载数据需要 5秒 42 } catch (InterruptedException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } 46 //数据加载完成,可以更新界面了 47 handler.sendEmptyMessage(MSG_INIT_VIEW); 48 } 49 50 private void initView(){ 51 //TODO 刷新界面 52 } 53 54 }
查看应用启动时间或某个Activity时间方法如下:
adb shell am start -w packagename/activity 输出的结果类似于: $ adb shell am start -W com.test/com.test.MainActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.test/com.test.MainActivity}
Status: ok
LaunchState: COLD
Activity:com.test/com.test.MainActivity
TotalTime: 496
WaitTime: 503
Complete
WaitTime 返回从 startActivity 到应用第一帧完全显示这段时间. 就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间;
TotalTime 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause的耗时。
开发者只需要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时