在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$1.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)
任何建议或帮助表示感谢,谢谢。
答案 0 :(得分:2)
出于功能目的,这只是一个警告,即进程间(通过绑定器)调用正在阻塞,AOSP source for this warning。
默认情况下,进程间调用是阻塞的,但是当它被标记为 oneway
(通过 AIDL)时,它会以触发并忘记(非阻塞)的方式执行。系统进程在调用其他(可能未知的用户代码)时使用非阻塞调用很重要,以避免整个系统停顿。因此,此警告旨在标记这样的危险调用:请参阅关于 oneway
的 android developer AIDL documentation。
在这个例子中,有一个对 ActivityManagerService
reportAssistContextExtras
的调用(AM 在主系统进程中运行),它依次调用另一个 IPC(进程间)调用 AssistStructure$ParcelTransferReader.fetchData
,并且后者未标记为 oneway
(触发此警告)。
在 Moto G6 上(在 Sony Xperia 上不会发生)
它们可能有不同的实现/android 版本或不同的调用序列(因此不会被调用)..
归根结底,是android实现的监督;对于这种特殊情况,可能已经解决了,请参阅最新的 source of activity manager .
如果不会造成功能问题,请忽略与您的代码无关的警告。如果此类调用(在本例中为 fetchData
)解析为您的代码,请确保不要阻塞(快速返回)。
但是可能会导致系统看门狗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 提交..
答案 1 :(得分:0)
我没有理由这样做。如果已打开,请关闭即时运行。清理项目(如果不是足够,则清理几次)并重建项目
答案 2 :(得分:0)
文件|无效的缓存/重启对我有用