Android Notices

  • Android 9.0 及之前的版本和 Android 10.0 中 onNewIntent()onRestart()执行顺序不一致。

  • adb shell am start -W packageName/Activity (activity为绝对路径) 可用来启动应用,并且查看冷启动耗时

  • ContentProvider 可用来初始化。例如LeakCanary 2.0中,在ContentProvider的onCreate()方法中执行初始化代码。这样就可以避免在Application的onCreate()中初始化,简化接入流程。ContentProvider的启动流程会在Application的onCreate()之前。因为ActivityThread中的handleBindApplication()中会去解析AndroidManifest文件,并且调用installContentProvider()初始化ContentProvider,然后调用ContentProvider的attachInfo()函数,从而执行ContentProvider的onCreate()函数。handleBindApplication()中整体的流程是会先创建Application,然后执行Application的attachBaseContext()方法,接着会执行installContentProvider()也即会执行到ContentProvider的onCreate(),然后再执行Application的onCreate()。就是因为这样的顺序,所以才可以将在Application的onCreate()中初始化的代码放置在ContentProvider的onCreate()去进行执行。优点是例如SDK接入的时候不需要手动接入,缺点是没有办法去进行相应的按需加载或者延时加载,无法控制应用启动时间。

Search

    Table of Contents