当前位置: 首页 > news >正文

android 是Application类先运行还是AndroidManifest.xml中action先运行?Application类先运行

android 是Application类先运行还是AndroidManifest.xml中action先运行

在Android应用启动过程中,Application类和AndroidManifest.xml中的action存在一个严格的初始化顺序。具体来说:

  1. Application:在应用启动时,系统会首先实例化应用的Application类,并调用其onCreate()方法。这个步骤是整个应用生命周期的起点。无论应用是直接启动某个ActivityService,还是接收某个Broadcast,都需要先初始化Application类。

  2. AndroidManifest.xml中的action:在Application类初始化之后,系统才会解析AndroidManifest.xml文件中定义的各种组件(如ActivityServiceBroadcastReceiver等),并根据应用启动的具体方式来执行相应的action

简而言之,Application类的onCreate()方法总是先于AndroidManifest.xml中定义的action执行。下面是一个示例来说明这个过程:

示例代码

自定义Application

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();Log.d("MyApplication", "Application onCreate");}
}

MainActivity

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d("MainActivity", "Activity onCreate");}
}

AndroidManifest.xml

<applicationandroid:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
</application>

运行顺序

当应用启动时,日志输出将显示以下顺序:

D/MyApplication: Application onCreate
D/MainActivity: Activity onCreate

这表明Application类的onCreate()方法首先执行,然后才是MainActivityonCreate()方法。

结论

Application类的初始化和其onCreate()方法的执行总是优先于AndroidManifest.xml中定义的组件的执行。这一机制确保了在任何应用组件启动之前,应用的全局状态和资源已经被初始化。

android Application类的用途及示例

在Android应用中,Application类是整个应用程序的入口点,它在应用启动时初始化,并在整个应用生命周期内存在。Application类通常用于以下目的:

  1. 全局状态管理:可以在Application类中保存一些全局的状态信息或变量,以便在应用的各个组件之间共享。
  2. 初始化:可以在Application类中进行一些全局的初始化工作,如初始化第三方库、设置全局配置等。
  3. 生命周期管理:可以通过重写Application类的生命周期方法来管理应用的生命周期事件。

创建自定义Application类

首先,需要创建一个自定义的Application类:

public class MyApplication extends Application {private String globalVariable;@Overridepublic void onCreate() {super.onCreate();// 初始化全局状态或资源globalVariable = "Initial Value";// 例如,初始化第三方库// ExampleLibrary.init(this);}public String getGlobalVariable() {return globalVariable;}public void setGlobalVariable(String globalVariable) {this.globalVariable = globalVariable;}
}

在Manifest文件中声明Application类

AndroidManifest.xml中,需要将自定义的Application类声明为应用的Application类:

<applicationandroid:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><!-- 其他组件声明 -->
</application>

使用自定义Application类

在应用的其他组件中(如Activity或Service),可以通过getApplication()方法获取自定义的Application实例,并访问其全局变量或方法:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MyApplication app = (MyApplication) getApplication();String value = app.getGlobalVariable();Toast.makeText(this, "Global Variable: " + value, Toast.LENGTH_LONG).show();}
}

总结

Application类在Android应用开发中非常重要,它提供了一个在应用的所有组件中共享全局状态和资源的机制。通过自定义Application类,可以在应用启动时进行初始化工作,管理全局状态,并处理应用的生命周期事件。这对于构建复杂和高效的Android应用程序是非常有用的。

相关文章:

  • 计算机公共课面试常见问题:线性代数篇
  • 计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验
  • TS_开发一个项目
  • 【51单片机】串口通信(发送与接收)
  • uniapp中实现瀑布流 短视频页面展示
  • python3递归目录删除N天前的文件(带有日志记录)
  • RabbitMQ中java实现队列和交换机的声明
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • 大数据面试题之HBase(1)
  • LabVIEW遇到无法控制国外设备时怎么办
  • 学生管理系统
  • Langchain-实战篇-搭建本地问答机器人-01
  • Linux下QT程序启动失败问题排查方法
  • 生产环境 CentOS 7 k8s v1.28.0离线部署
  • 人工智能 (AI) 进阶【C#】版
  • [译]Python中的类属性与实例属性的区别
  • canvas 高仿 Apple Watch 表盘
  • CSS 专业技巧
  • go语言学习初探(一)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java反射-动态类加载和重新加载
  • LeetCode18.四数之和 JavaScript
  • nginx 配置多 域名 + 多 https
  • pdf文件如何在线转换为jpg图片
  • select2 取值 遍历 设置默认值
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 老板让我十分钟上手nx-admin
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何在 Tornado 中实现 Middleware
  • 入口文件开始,分析Vue源码实现
  • 深度解析利用ES6进行Promise封装总结
  • 系统认识JavaScript正则表达式
  •  一套莫尔斯电报听写、翻译系统
  • k8s使用glusterfs实现动态持久化存储
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • # centos7下FFmpeg环境部署记录
  • (12)目标检测_SSD基于pytorch搭建代码
  • (4)STL算法之比较
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)(官方)UE4--图像编程----着色器开发
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(六):替换字符串中匹配的子串
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)