我看网上很多教程包括书籍都是介绍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 }
来源:https://www.cnblogs.com/gushandujian/p/12595798.html