402d
@402d
начинал с бейсика на УКНЦ в 1988

Как вызвать функцию асинхронно, если она проверяет, что запущена на главном треде?

Заголовок лучше придумать не смог.
Есть такой метод getActivePrintJobs()
https://android.googlesource.com/platform/prebuilt...
в котором первой же строкой throwIfNotCalledOnMainThread();

И есть некоторое количество ANR
"main" tid=1 Native
  #00  pc 0x00000000000d1214  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
  #01  pc 0x000000000008b6b0  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
  #02  pc 0x000000000005a398  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
  #03  pc 0x000000000005b284  /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+60)
  #04  pc 0x000000000005b028  /system/lib64/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+180)
  #05  pc 0x000000000004ef60  /system/lib64/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+72)
  #06  pc 0x000000000014ea3c  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact(_JNIEnv*, _jobject*, int, _jobject*, _jobject*, int)+152)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:511)
  at android.printservice.IPrintServiceClient$Stub$Proxy.getPrintJobInfos (IPrintServiceClient.java:403)
  at android.printservice.PrintService.getActivePrintJobs (PrintService.java:350)
  at ru.a402d.rawbtprinter.printservice.RawBtService.findJobById (RawBtService.java:395)
  at ru.a402d.rawbtprinter.printservice.RawBtService$MyHandler.handleMessage (RawBtService.java:220)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7397)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:935)

646fc0ee935e2725594450.png
В консоле есть совет, который звучит как издевательство

Длительность вызова механизма Binder трудно прогнозировать. Она может зависеть не только от сложности самого вызова, но и от периодически возникающих факторов, таких как конфликты блокировок на сервере. Работать с вызовами механизма Binder нужно так же, как с операциями ввода-вывода, и по возможности не использовать их в основном потоке. Если это все же необходимо, применяйте средства инструментирования и отслеживайте выполнение таких вызовов, чтобы определять причины замедления работы.


Только забить ? Или что-то реально придумать ?
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Dmtm
Android
попробовать через рефлексию подменить метод
вроде бы можно https://stackoverflow.com/a/71600387
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы