2

AsyncTask.doInBackground() メソッドで AccountManager.getAccountsByType() を呼び出しています。しかし、少なくとも時々、この StrictModeViolation を引き起こしています:

android.os.StrictMode$StrictModeViolation: policy=95 violation=2
            at android.os.StrictMode.executeDeathPenalty(StrictMode.java:1379)
            at android.os.StrictMode.access$1300(StrictMode.java:118)
            at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolation(StrictMode.java:1372)
            at android.os.StrictMode$AndroidBlockGuardPolicy$1.run(StrictMode.java:1254)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

しかし、確かに AsyncTask.doInBackground() は、AccountManager メソッドを呼び出しても問題ないはずです。

これは、StrictMode を有効にする方法です。

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .penaltyDeath()
        .build());

ちなみに、AccountManager のドキュメントには、多くのメソッドで「このメソッドをメイン スレッドから呼び出しても安全です」と書かれていることは知っていますが、それが間違っていることは周知の事実であり、AccountManager の使用を移動することで、他のいくつかの StrictModeViolations を既に回避しています。 AsyncTasks に。

4

0 に答える 0