这个需要看那些非常厉害的专家的blog,要缩短Activity启动时间,可以参考一下思路:
<1> : Activity 完整启动过程,更多的是属性framework部分;
看熟Activity类,PhoneWindow类,DecorView这个内部类,ViewRootImpl类;
只有熟悉真正的原理了,才知道为什么,为什么,为什么需要这样操作.
<2> : 一个隐蔽的方法;
Activity.attach(...)方法,在onCreate之前.
<3> : 上面主要是Activity如何创建,注重视图和视图创建过程;
<4> : 需要使用到的分析方法SysTrace工具,Method Trace视图看法;不过如果看生成的条状图,有点恶心!建议还是看时间.
一个重要的概念:
Activity最终显示出来是在onResume()方法回调后才显示的,而不是onCreate()方法,在之前都是在创建视图,渲染视图等操作,Activity最先调用的是自己不向外公开的attach(...)方法,这个方法如果经常使用Fragment的开发者就会很熟悉,平时传递什么参数到Fragment中都在这里面获取处理.
android studio点击下面的小图标.
eclipse工具那就更简单了,直接产看DDMS就可以了.
在Android studio平台中点击上面的图标后:
点击弹出:
勾选你需要查看的信息部分,一般下面几个勾选的相对频繁:
当然还可以查看CPU,电源信息等等.
下面是专家给出的3中优化Activity启动速度的方式,均在Activity中的onCreate中添加:
具体参考代码如下:
package org.durian.durianloaddelay; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import android.widget.TextView; public class DurianMainActivity extends ActionBarActivity { private TextView mText; private ImageView mImage; private Handler mHandler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.durian_main); mText=(TextView)findViewById(R.id.text); mImage=(ImageView)findViewById(R.id.image); //first way // mHandler.post(mLoadRunnable); //second way // mHandler.postDelayed(mLoadRunnable,1000); //third way getWindow().getDecorView().post(new Runnable() { @Override public void run() { mHandler.post(mLoadRunnable); } }); } private Runnable mLoadRunnable=new Runnable(){ @Override public void run() { updateUI(); } }; private void updateUI(){ mText.setText("update ui loading ..."); Bitmap map= BitmapFactory.decodeResource(getResources(),R.drawable.icon); mImage.setImageBitmap(map); } }
参见注释部分,更具分析的原理,推荐第三种是相对能够更有效改善的.