新しいデバッグインスタンスを開始するたびに、ユーザー補助サービスは無効な状態にリセットされます。
連続するデバッグ実行間で有効にしておく方法はありますか(サービスをデバッグするために毎回有効にするのは非常に長くて退屈なので)?
実際のデバイスとエミュレーターで同じ動作をします。
サービスに例外はありません。イベントハンドラーにコードなしでイベントを試しました。
ログに疑わしい行があります:
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に関するこのバグレポート 。
これは、問題にexplainおよびmitigateする可能性があります(ただし、Force stop
の原因ではありません)。
Android 3.1
の後、「システムはすべてのブロードキャストインテントにFLAG_EXCLUDE_STOPPED_PACKAGES
を設定します。」したがって、3.1以降、すべてのアプリは起動時に停止します。なぜ ?。セキュリティ上の理由から。
フラグをオフにするFLAG_EXCLUDE_STOPPED_PACKAGES
のルールがあります。
(1)アプリが設定からForce stop
を取得した場合OR unresponsive app
ボタン、フラグが設定されます。
(2)アプリはPhone Storage
にある必要があり、 [〜#〜] not [〜#〜] external storage
(e.g。sdcard
)にある必要があります。そうでない場合は、フラグが設定されます。 BOOT_COMPLETE
は外部ストレージがマウントされる前に送信されます。そのため、アプリが外部ストレージにインストールされている場合、BOOT_COMPLETEブロードキャストメッセージを受信しません。
(3)アプリケーションが実行されたことがない場合、フラグが設定されます(現在のブート状態に相対的ではありません; O)このブートでは決して意味しませんOR最後のブート状態でフラグを無効にしました)。
re-enableForce stop
レシーバーを想定したBOOT_COMPLETED
後のサービスへの簡単な方法(必要に応じてスクリプト化)(再起動後は問題ないため、これがあると思います):
<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED"
adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED
launchcontrols を参照してください