android 冷启动性能优化

什么是冷启动?

之前从未打开过应用,后台中不存在该应用进程时。这时候点击应用图标icon启动应用程序叫做冷启动。

什么是热启动?

已经启动,点击返回键或是HOME键返回到桌面,然后后台还存在该应用的进程。返回桌面进行一些列操作后,再次点击图标的启动,成为热启动。这里面冷、热启动的主要划分,是通过看后台是否还存在该应用进程来划分的。

冷启动时:肯定会走application,我们的优化主要也是针对他来讲。

  1. 将一系列的初始化操作放在Thread里面,比如各种第三方的sdk的启动啊。
      new Thread(new Runnable() {
            @Override
            public void run() {
                //doInitAction
            }
        }
        ).start();
  1. 将一系列的初始化操作,放在IntentService中,放在后台来执行。IntentService启动的时候,内部开了一个线程,当任务执行完后,IntentService会自动停止,而不需要我们去手动控制。原理和第一条差不多。
import android.app.IntentService;
import android.content.Context;
import android.content.Intent;

public class InitializeService extends IntentService{
    private static final String ACTION_INIT_WHEN_APP_CREATE = "com.sanxin.ttreader";

    public InitializeService() {
        super("InitializeService");
    }

    public static void init(Context context) {
        Intent intent = new Intent(context, InitializeService.class);
        intent.setAction(ACTION_INIT_WHEN_APP_CREATE);
        context.startService(intent);

    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_INIT_WHEN_APP_CREATE.equals(action)) {
                performInit();
            }
        }
    }

    /**.
     * do you init action here
     */
    private void performInit() {
     //do somthing youself here

    }
}

然后再application 的onCreate方法中使用这个service:

 InitializeService.init(getApplicationContext());
  1. 界面预加载。指的是在启动的Activity启动前,给一个启动图片或是什么的,这样可以增强用户的体验。

在drawable目录下,新建start_window.xml,用来承载一个图片




    
    
        
    

在style文件中建一个style:

    
    
    
    
    

然后在AndroidManifest.xml文件中配置:

    
        
            
                

                
            
        
    

最后在MainActivity中:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        InitializeService.init(getApplicationContext());
    }
}

ok ,这样就好了。

你可能感兴趣的:(android 冷启动性能优化)