zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    C++ 使用老牌库xzip & unzip对文件进行压缩解压
    第一次玩蛇,有点紧张。
    fiddler 抓取手机http/https包
    disk或者Partition镜像的制作
    VS2013+phread.h环境配置
    C++ 浅谈 strlen 与 sizeof的区别
    Qt 显示网页的控件
    Qt error: C2236: 意外的标记“class”。是否忘记了“;”?
    初识MySQL——人生若如初相逢
    【学习笔记】HTML基础:列表、表格与媒体元素
  • 原文地址:https://www.cnblogs.com/gushandujian/p/12595798.html
Copyright © 2011-2022 走看看