Android应用程序启动是怎么实现的
发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,本篇内容介绍了"Android应用程序启动是怎么实现的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2024年12月02日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安全错误
数据库的锁怎样保障安全
谷饶选色器软件开发商
云计算软件开发工具
网络安全很重要英语
网络游戏服务器价格
云服务器 财务安全
有关网络安全主题儿童画
数据库查询前年的账单
山东各大城市网络安全宣传
租学校机房当服务器
软件开发企业的资产负债率
多多果园 是谁软件开发
卖论文数据库的怎么卖的
网络安全事故分析
网络安全法信息传输保护
plsql导入数据库
200w并发要预算多少服务器
天域 数据库
北京电脑软件开发的学校
青岛精益管理软件开发
qq泄露数据库下载
在服务器上如何安装iis
山西大数据服务器机箱批发
成都有实力软件开发公司
服务器硬盘接口卡拆卸
web应用数据库热迁移
打印服务器拒绝访问怎么查
dm816x 软件开发
什么是数据库dba权限
网络安全大赛题库及答案
香港代理服务器