Android应用程序启动是怎么实现的
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本篇内容介绍了"Android应用程序启动是怎么实现的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年01月21日Android应用程序启动是怎么实现的
本篇内容介绍了"Android应用程序启动是怎么实现的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Android应用程序进程在启动的时候, 会在进程中加载ActivityThread类,并且执行这个类的main函数。
应用程序的消息循环过程就是在这个main函数里面实现的。
我们来看看这个函数的实现,它定义在frameworks/base/core/java/android/app/ActivityThread.java文件中:
[java] view plaincopypublic final class ActivityThread { ...... public static final void main(String[] args) { ...... Looper.prepareMainLooper(); ...... ActivityThread thread = new ActivityThread(); thread.attach(false); ...... Looper.loop(); ...... thread.detach(); ...... } }
这个函数做了两件事情,一是在主线程中创建了一个ActivityThread实例,二是通过Looper类使主线程进入消息循环中,这里我们只关注后者。
首先看Looper.prepareMainLooper函数的实现,这是一个静态成员函数,定义在frameworks/base/core/java/android/os/Looper.java文件中:
[java] view plaincopypublic class Looper { ...... private static final ThreadLocal sThreadLocal = new ThreadLocal(); final MessageQueue mQueue; ...... /** Initialize the current thread as a looper. * This gives you a chance to create handlers that then reference * this looper, before actually starting the loop. Be sure to call * {@link #loop()} after calling this method, and end it by calling * {@link #quit()}. */ public static final void prepare() { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper()); } /** Initialize the current thread as a looper, marking it as an application's main * looper. The main looper for your application is created by the Android environment, * so you should never need to call this function yourself. * {@link #prepare()} */ public static final void prepareMainLooper() { prepare(); setMainLooper(myLooper()); if (Process.supportsProcesses()) { myLooper().mQueue.mQuitAllowed = false; } } private synchronized static void setMainLooper(Looper looper) { mMainLooper = looper; } /** * Return the Looper object associated with the current thread. Returns * null if the calling thread is not associated with a Looper. */ public static final Looper myLooper() { return (Looper)sThreadLocal.get(); } private Looper() { mQueue = new MessageQueue(); mRun = true; mThread = Thread.currentThread(); } ...... }
"Android应用程序启动是怎么实现的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
函数
应用程序
程序
应用
内容
文件
更多
消息
知识
线程
过程
进程
循环
实用
学有所成
接下来
事情
困境
实例
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发适合用什么电脑
大舜网络技术
嵌入式软件开发软件
电脑改网络服务器
怎样删除离线服务器
网络安全欺骗攻击概念
深圳聊天软件开发收费
科技互联网大赛
科技司 互联网金融师
网络安全专家罗伯茨
我的世界全局资源怎么覆盖服务器
网络安全工程师面试的专业知识
京东数据库怎么查看
服务器更新后无法登录
做安卓用什么数据库
数据库获取数据异常
小学生网络安全手抄报三年级
csdn中国软件开发者薪酬
数据库身份证用什么类型
钉钉 建立企业数据库
软件开发精益提案案例大全
北京互联网时代科技有限公司
数据库默认字符集
windows服务器无线认证
kinect体感软件开发
在服务器怎么进入config
数据库备份一张表单条数据
网管软件开发需要具备的能力
部队网络安全风险评估
环型数据库