1

私のアプリケーションでは、さらなる操作を実行する前にアクティブウィンドウのルートを取得するアクセシビリティサービスがあります。関連するセクションは次のようになります。Android:アクセシビリティサービスのgetRootInActiveWindowでANRが発生する可能性がありますか?

@Override 
    public final void onAccessibilityEvent(AccessibilityEvent event) { 
    ... 
    AccessibilityNodeInfo rootAccessibilityNode = getRootInActiveWindow(); 
    ... 
    } 

私はANR数についてユーザーからの苦情を取得していて、スタックトレースはgetRootInActiveWindowラインに向けて私を指しています。

getRootInActiveWindowがANRを引き起こす可能性はありますか?もしそうなら、メカニズムは何ですか?このメソッドを独自のスレッドで呼び出す必要がありますか?これについてのドキュメントには何もありません。

+0

ANRレポートからスタックトレースを見ると非常に便利です。 – ChrisCM

答えて

1

私はこの行がクラッシュの直接の原因であることは間違いありませんが、スタックトレースを見たいと思っています。また、サービスの開始方法(アクセシビリティサービスを初めて利用する開発者は頻繁にこの問題を抱えています)を知っておくと便利です。あなたが普通の明白な答えであなたの宿題を済ませたと仮定すると、次のものが残っています:

A:権限の問題。ルーテッドデバイスなどのテストを行ったことがある場合は、ユーザーにアクセス権の問題がある可能性があります。あなたのサービスconfix XMLファイルにandroid:canRetrieveWindowContent="true"があることを確認してください。

B:アクセシビリティイベントを除外していない場合は、ウィンドウロードなどの間にトリガーするイベントがあります。そこにないコンテンツを手に入れようとすると、システムがそのコンテンツを気に入らないかもしれません。これは競合状態になる可能性があるため、よりエミュレートされた環境では動作しないため、エミュレータのテストを行うことで隠すこともできます。これはまた、ノード階層が通過するのにかなり高価なものであり、頻繁に行うことを望まないため、パフォーマンスの問題を引き起こします。コードを実行しているaccessibilityEventTypesを制限してみてください。

+0

android:canRetrieveWindowContent = "true"は既に私のサービスconfix XMLファイルにあります。&accessibilityEventTypesは "typeWindowStateChanged、typeViewFocused、typeWindowContentChanged"です。 getRootInActiveWindowのためにまだANRがたくさんあります。主にAndroid 8.0の場合 – nikhil

+0

ANRをお持ちの場合は、スタックトレースがあります...質問をしてstraktraceを共有する必要があります。 – ChrisCM

+1

お返事ありがとうございます。 https://stackoverflow.com/questions/46789325/getting-lots-of-anr-due-to-accessibilitynodeinfo-getchild?noredirect=1#comment80712488_46789325をご確認ください。 – nikhil

関連する問題