Android - 此流程的传出交易必须是 FLAG_ONEWAY

Android - Outgoing transactions from this process must be FLAG_ONEWAY

我在 Moto G6 设备上 运行 我的 Android 应用程序时遇到两个问题(在其他设备或模拟器上没有这样的问题)。在我的应用程序中,有一个简单的 LoginActivity,在成功登录后启动 MainActivity(在 AsyncTask 的 onPostExecute 中):

val intent = Intent(this@LoginActivity, MainActivity::class.java)
startActivity(intent)

但是在 Moto G6 上(在 Sony Xperia 上没有发生),存在交易应该是单向的错误:

10-17 07:50:45.058 1878-2153/? W/Binder: Outgoing transactions from this process must be FLAG_ONEWAY
java.lang.Throwable
    at android.os.BinderProxy.transact(Binder.java:736)
    at android.app.assist.AssistStructure$ParcelTransferReader.fetchData(AssistStructure.java:407)
    at android.app.assist.AssistStructure$ParcelTransferReader.go(AssistStructure.java:343)
    at android.app.assist.AssistStructure.ensureData(AssistStructure.java:2110)
    at com.android.server.autofill.Session.send(Session.java:200)
    at com.android.server.am.ActivityManagerService.reportAssistContextExtras(ActivityManagerService.java:13475)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2467)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3082)
    at android.os.Binder.execTransact(Binder.java:674)

感谢任何建议或帮助,谢谢。

我没有理由有这个。如果即时 运行 打开,请将其关闭。清理项目(几次还不够)并重建项目

文件 |无效 Caches/Restart 对我有效

出于功能目的,这只是进程间(通过活页夹)调用正在阻塞的警告,AOSP source for this warning

默认情况下,进程间调用是阻塞的,但是当它被标记为 oneway(通过 AIDL)时,它被执行为 fire & forget(非阻塞)。系统进程在调用其他(可能未知的用户代码)时使用非阻塞调用很重要,以避免拖延整个系统。所以这个警告是为了标记这样的危险调用:参见 android developer AIDL documentation 关于 oneway.

在这个例子中,调用了 ActivityManagerService reportAssistContextExtras(AM 在主系统进程中运行),这又调用了另一个 IPC(进程间)调用 AssistStructure$ParcelTransferReader.fetchData ,后者未标记 oneway(触发此警告)。

on Moto G6 (not happening on Sony Xperia)

它们可能有不同的 implementation/android 版本或不同的调用顺序(因此它不会被调用)..

归根结底,这是 android 实施监督;对于这种特殊情况,可能已经解决了,请参阅最新的 source of activity manager .

如果不会产生功能问题,请忽略与您的代码无关的警告。如果此类调用(本例中的 fetchData)解析为您的代码,请确保不要阻塞(return 快速)。

不过可能会导致system watchdog kill,搜索其他日志了解后果,如:

W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in handler on main thread (main)
W Watchdog: main annotated stack trace:
W Watchdog:     at android.os.BinderProxy.transactNative(Native Method)

最终,如果不是您的代码,可能需要将其与 Google 一起提交..