• android应用程序启动流程


      我看网上很多教程包括书籍都是介绍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 }
  • 相关阅读:
    angularjs表格方式显示数据
    AngularJS $http
    指令
    B2C电商平台开发心得(asp.net+bootstrap)
    项目修改有感_主要是以js、Gridview为主
    ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作
    AtrousConvolution和dilated convolution
    keras中自定义Layer
    Messes in Reading Source Coding of SSD
    SSD
  • 原文地址:https://www.cnblogs.com/gushandujian/p/12595798.html
Copyright © 2020-2023  润新知