代码之家  ›  专栏  ›  技术社区  ›  satur9nine

Android Init属性触发器是否总是在引导时发生?如果是,具体时间是什么时候?

  •  0
  • satur9nine  · 技术社区  · 6 年前

    谷歌在Android Init上的文档 https://android.googlesource.com/platform/system/core/+/oreo-release/init/README.md 说以下几点

    一个操作可以有多个属性触发器,但只能有一个属性触发器 事件触发器。

    例如: on boot && property:a=b 定义的操作 当启动事件触发器发生且属性A 等于B。

    on property:a=b && property:c=d 定义执行的操作 三次:

    1. 在初始启动期间,如果属性A=B和属性C=D。
    2. 当属性A转换为值B,而属性C已经等于D时。
    3. 当属性A已经等于B时,属性C转换为值D的任何时间。

    在第一个例子中, on boot 触发器似乎是启动时执行操作的必要条件。但是在第二个例子中没有 靴子上 触发器已被使用,但文档说明无论如何,该操作仍将在引导时执行。

    因此,似乎只有两种说法中的一种是正确的:

    1. property 启动时不会自动发生触发器,在这种情况下,第二个示例描述错误,关于case 1
    2. 财产 触发器总是在启动时执行,而不仅仅是在它们转换时,在这种情况下,第一个示例不需要包括 boot 触发。

    如果第二句话是真的,那么它是不是 靴子 阶段而不是说 late-init ?

    1 回复  |  直到 6 年前
        1
  •  0
  •   satur9nine    6 年前

    on boot && property:a=b boot

    on boot
        exec /system/bin/echo "Trigger test A"
    

    on late-init
        exec /system/bin/echo "Trigger test B"
    

    on property:persist.testing=1
        exec /system/bin/echo "Trigger test C"
    

    on boot && property:persist.testing=1
        exec /system/bin/echo "Trigger test D"
    

    on post-fs-data && property:persist.testing=1
        exec /system/bin/echo "Trigger test E"
    

    on property:ro.build.type=eng
        exec /system/bin/echo "Trigger test F"
    

    on boot && property:ro.build.type=eng
        exec /system/bin/echo "Trigger test G"
    

    on post-fs-data && property:ro.build.type=eng
        exec /system/bin/echo "Trigger test H"
    

    on late-init && property:ro.build.type=eng
        exec /system/bin/echo "Trigger test I"
    

    01-20 20:33:14.986     0     0 I init    : processing action (late-init) from (/init.rc:270)
    01-20 20:33:15.001     0     0 I init    : starting service 'exec 1 (/system/bin/echo Trigger test B)'...
    01-20 20:33:15.652     0     0 I init    : processing action (post-fs-data) from (/init.rc:373)
    01-20 20:33:15.841     0     0 I init    : processing action (ro.build.type=eng && post-fs-data) from (/vendor/etc/init/hw/init.device.log.rc:69)
    01-20 20:33:15.841     0     0 I init    : starting service 'exec 11 (/system/bin/echo Trigger test H)'...
    01-20 20:33:17.025     0     0 I init    : processing action (boot) from (/init.rc:556)
    01-20 20:33:17.250     0     0 I init    : processing action (boot) from (/vendor/etc/init/hw/init.device.log.rc:48)
    01-20 20:33:17.251     0     0 I init    : starting service 'exec 14 (/system/bin/echo Trigger test A)'...
    01-20 20:33:17.301     0     0 I init    : processing action (ro.build.type=eng && boot) from (/vendor/etc/init/hw/init.device.log.rc:66)
    01-20 20:33:17.301     0     0 I init    : starting service 'exec 15 (/system/bin/echo Trigger test G)'...
    01-20 20:33:17.361     0     0 I init    : processing action (enable_property_trigger) from (<Builtin Action>:0)
    01-20 20:33:17.386     0     0 I init    : processing action (ro.build.type=eng) from (/vendor/etc/init/hw/init.device.log.rc:63)
    01-20 20:33:17.388     0     0 I init    : starting service 'exec 16 (/system/bin/echo Trigger test F)'...
    01-20 20:33:19.272     0     0 I init    : processing action (vold.decrypt=trigger_post_fs_data) from (/init.rc:671)
    01-20 20:33:19.272     0     0 I init    : processing action (post-fs-data) from (/init.rc:373)
    01-20 20:33:19.495     0     0 I init    : processing action (ro.build.type=eng && post-fs-data) from (/vendor/etc/init/hw/init.device.log.rc:69)
    01-20 20:33:19.495     0     0 I init    : starting service 'exec 21 (/system/bin/echo Trigger test H)'...
    01-20 12:33:19.880     0     0 I init    : processing action (persist.testing=1) from (/vendor/etc/init/hw/init.device.log.rc:54)
    01-20 12:33:19.881     0     0 I init    : starting service 'exec 24 (/system/bin/echo Trigger test C)'...
    08-27 14:25:06.256     0     0 I init    : processing action (persist.testing=1) from (/vendor/etc/init/hw/init.device.log.rc:54)
    08-27 14:25:06.257     0     0 I init    : starting service 'exec 29 (/system/bin/echo Trigger test C)'...