Android 启动时间优化 <22>

这个需要看那些非常厉害的专家的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);

    }

}

参见注释部分,更具分析的原理,推荐第三种是相对能够更有效改善的.










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值