网站建设色调的太原的网站建设公司哪家好
2026/4/18 4:25:45 网站建设 项目流程
网站建设色调的,太原的网站建设公司哪家好,怎么介绍自己的网页,宁波seo专员Android 多种方式启动同一进程#xff0c;Application.onCreate() 会多次执行吗#xff1f; 一、问题场景 在 Android 开发中#xff0c;我们经常会遇到这样的场景#xff1a; A 进程通过 bindService() 预启动 B 进程#xff08;用于预热/预加载#xff09;几十毫秒后…Android多种方式启动同一进程Application.onCreate()会多次执行吗一、问题场景在Android开发中我们经常会遇到这样的场景A 进程通过bindService()预启动B 进程用于预热/预加载几十毫秒后A 进程又通过startActivity()启动B 进程的某个Activity问题B进程的Application.onCreate()会多次执行吗二、答案不会。Application.onCreate()在进程生命周期内只会执行一次。三、原理分析3.1Android进程与Application的关系┌─────────────────────────────────────────┐ │ Android 进程 │ │ ┌───────────────────────────────────┐ │ │ │ Application 实例 │ │ │ │ (整个进程只有一个单例) │ │ │ └───────────────────────────────────┘ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Activity │ │Service │ │Receiver │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────┘关键点每个Android进程对应唯一一个Application实例Application.onCreate()在进程创建时调用且仅调用一次无论通过什么方式Service、Activity、BroadcastReceiver、ContentProvider触发进程启动Application只会初始化一次3.2 进程启动流程第一次 bindService() 触发 ┌──────────┐ bindService() ┌──────────┐ │ A 进程 │ ─────────────────► │ Zygote │ └──────────┘ └────┬─────┘ │ fork ▼ ┌──────────────┐ │ B 进程 │ │ │ │ 1. 创建进程 │ │ 2. Application.onCreate() ✅ │ 3. 创建 Service │ │ 4. onBind() │ └──────────────┘ 几十毫秒后 startActivity() 触发 ┌──────────┐ startActivity() ┌──────────────┐ │ A 进程 │ ─────────────────► │ B 进程 │ └──────────┘ │ (已存在) │ │ │ │ 进程已存在 │ │ 不会重新创建 │ │ │ │ 直接创建 Activity │ │ ❌ 不会再执行 Application.onCreate() └──────────────┘3.3 源码层面分析在ActivityThread中进程启动时会调用handleBindApplication()// ActivityThread.java 简化逻辑privatevoidhandleBindApplication(AppBindDatadata){// 创建 Application 实例只会执行一次Applicationappdata.info.makeApplication(false,mInstrumentation);// 调用 onCreate只会执行一次mInstrumentation.callApplicationOnCreate(app);}后续的组件启动Activity、Service等都是在已有进程内创建不会重复触发Application的创建。四、验证方法可以通过日志验证classMyApplication:Application(){overridefunonCreate(){super.onCreate()Log.d(MyApp,onCreate called, pid${Process.myPid()}, time${System.currentTimeMillis()})}}测试结果无论bindService和startActivity调用多少次、间隔多短onCreate日志只会出现一次。五、相关场景总结场景Application.onCreate() 执行次数bindService → startActivity同进程1 次startActivity → bindService同进程1 次多次 startActivity同进程1 次多次 bindService同进程1 次进程被杀死后重新启动再执行 1 次不同进程android:process 配置不同每个进程各 1 次六、注意事项6.1 多进程情况如果Service和Activity配置了不同的进程则各自进程的Application.onCreate()会分别执行!-- AndroidManifest.xml --serviceandroid:name.MyServiceandroid:process:remote/!-- 独立进程 --activityandroid:name.MyActivity/!-- 主进程 --此时bindService和startActivity会触发两个不同进程Application.onCreate()会执行两次每个进程各一次。6.2 预启动优化场景问题中的场景bindService预启动是一种常见的冷启动优化手段// 预启动提前拉起目标进程让其完成初始化funpreLaunch(){valintentIntent().setComponent(ComponentName(pkg,pkg.PreloadService))bindService(intent,connection,Context.BIND_AUTO_CREATE)}// 正式启动此时进程已存在启动更快funlaunch(){startActivity(Intent().setComponent(ComponentName(pkg,pkg.MainActivity)))}这种方式的优势第一次bindService触发进程创建 Application初始化后续startActivity时进程已热无需等待初始化启动更快七、总结Android 进程内 Application 是单例onCreate()只执行一次无论通过什么方式启动bindService、startActivity、sendBroadcast只要是同一进程Application不会重复初始化bindService 预启动是一种有效的冷启动优化手段可以提前完成进程初始化多进程配置时每个进程有独立的Application实例参考资料Android Application 官方文档Android 进程与线程

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询