63

每次我启动一个新的调试实例时,我的无障碍服务都会重置为禁用状态。

有什么方法可以在连续的调试运行中保持启用(因为每次启用它以调试服务很长很无聊)?

我在真实设备和模拟器上有相同的行为。
服务中没有异常,我在事件处理程序中尝试了没有代码的事件。

我的日志中有可疑行:

10:47:32.801 31669-31669/? E/AffinityControl: AffinityControl: registerfunction enter
10:47:32.821 3650-3690/? I/ActivityManager: Force stopping com.test.testaccessibilityservice appid=10241 user=0: from pid 31669
10:47:32.821 3650-3690/? I/ActivityManager: Killing 31271:com.test.testaccessibilityservice/u0a241 (adj 1): stop com.test.testaccessibilityservice cause from pid     
10:47:32.821 3650-3690/? W/ActivityManager: Scheduling restart of crashed service com.test.testaccessibilityservice/.MyAccessibilityService in 1000ms
10:47:32.821 3650-3690/? I/ActivityManager:   Force stopping service ServiceRecord{3f5e1fc4 u0 com.test.testaccessibilityservice/.MyAccessibilityService}

所以服务被强制停止并且永远不会重新启动。

笔记:

  • 如果我重新启动手机,服务就会启动。
  • 我对ApiDemos 示例和 ClockBackService(也有 QueryBackService)有相同的行为:

    18:07:15.871 3523-4251/? I/ActivityManager: Force stopping com.example.android.apis appid=10242 user=0: from pid 19382
    18:07:15.871 3523-4251/? I/ActivityManager: Killing 16542:com.example.android.apis/u0a242 (adj 1): stop com.example.android.apis cause from pid 19382
    18:07:15.871 3523-4251/? W/ActivityManager: Scheduling restart of crashed service com.example.android.apis/.accessibility.ClockBackService in 1000ms
    18:07:15.871 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{2f907c7b u0 com.example.android.apis/.ApiDemos t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{190ca05c u0 com.example.android.apis/.ApiDemos t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{27ada6e8 u0 com.example.android.apis/.accessibility.ClockBackActivity t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{51f4c32 u0 com.android.settings/.Settings$AccessibilitySettingsActivity t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force stopping service ServiceRecord{113bf024 u0 com.example.android.apis/.accessibility.ClockBackService}
    18:07:15.891 19382-19382/? D/AndroidRuntime: Shutting down VM
    

我试图通过覆盖 onStartCommand 来返回 START_STICKY 而不做任何更改。

它非常接近这个未回答的老问题如何调试无障碍服务?,但在我的情况下,该服务似乎已禁用,我不需要停止它并重新启动它。

我在 AOSP 上填写了这个错误报告

4

1 回答 1

1

这可能会以某种方式解释缓解您的问题(但不是导致您的问题的原因Force stop)。

Android 3.1“系统设置FLAG_EXCLUDE_STOPPED_PACKAGES所有广播意图”之后。所以在 3.1 之后,所有应用程序都会在启动时停止。为什么 ?。出于安全原因。

有规则可以关闭标志 FLAG_EXCLUDE_STOPPED_PACKAGES

(1)如果应用程序Force stop从设置或unresponsive app按钮中获取,则设置标志。

(2)您的应用程序需要在Phone Storage,而不是 external storage(例如sdcard)否则标志设置。在安装外部存储之前BOOT_COMPLETE发送。因此,如果应用程序安装到外部存储,它将不会收到 BOOT_COMPLETE 广播消息。

(3) 如果应用程序从未运行过,则设置该标志(从不与当前引导状态相关;O)绝不意味着在本次引导中,或者您在上次引导状态中使该标志无效)。

假设接收器后重新启用服务的快速方法(如果您愿意,可以编写脚本)(我猜你有这个,因为重启后你很好):Force stopBOOT_COMPLETED

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

启动控制

于 2018-02-02T00:17:20.677 回答