android应用程序启动流程

醉酒当歌 提交于 2020-03-30 00:28:25

  我看网上很多教程包括书籍都是介绍android app是从一个主Activity的onCreate开始的,难道它没有像windows一样有个主入口吗?今天我跟踪了一下程序的运行过程发现Android App的主入口并不是Activity的onCreate开始的。

handleBindApplication:6624, ActivityThread (android.app)   //走到这时能看到一个main函数且能下断点但是调试时提示代码和执行的位置不对应
access$2000:273, ActivityThread (android.app)
handleMessage:2020, ActivityThread$H (android.app)
dispatchMessage:112, Handler (android.os)
loop:216, Looper (android.os)
main:7625, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:524, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:987, ZygoteInit (com.android.internal.os)

  我们可以看出其实一个app运行时的入口不是主activity。那么我们有没有办法在主activity的onCreate前干点啥呢?在android app 的清单文件中我们看到有个一个application节点,这个节点我们可以理解它代表了我们的应用程序,它下面可以有很多个其他节点,就如同Activity节点对应一个类一样,application节点也对应着一个类,默认是Application,那我们能不能从Application类派生出一个类,让我们的App启动时执行我们的这个派生类,在Activity的创建前干点啥,比如检查手机机主身份,手机类型,初始化一些资源等,答案显然是可以的,那就是从Application类派生出一个类,然后在清单文件中为application指定name属性,这样就可以了。
  如:

<application    android:name=".BaseApplication"    //在这增加了我们这个应用它使用的类是BaseApplication,注意前面的.不要省    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">

  代码:

1 class BaseApplication: Application()
2 {
3 override fun onCreate() {
4 super.onCreate()
5 Log.d("测试","我是BaseApplication: ")
6 }
7 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!