调用startActivity触发StrictMode DiskReadViolation违规问题求助
调用startActivity触发StrictMode DiskReadViolation违规问题求助
各位大佬好,我遇到一个挺困惑的问题:我们在某个Activity里开启了StrictMode来检测违规操作,结果触发了DiskReadViolation,追踪到的问题点居然指向Activity类的startActivity()调用。我翻来覆去检查代码,完全没看到这段逻辑里有任何IO操作,实在搞不懂为什么会触发这个违规。
下面是捕获到的完整堆栈信息:
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1659) at android.database.sqlite.SQLiteConnection.applyBlockGuardPolicy(SQLiteConnection.java:1630) at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:1298) at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:838) at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62) at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:157) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:144) at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:238) at android.database.AbstractCursor.moveToNext(AbstractCursor.java:287) at com.android.server.enterprise.storage.EdmStorageProviderBase.getBooleanList(EdmStorageProviderBase.java:133) at com.android.server.enterprise.storage.EdmStorageProviderBase.getBoolean(EdmStorageProviderBase.java:1041) at com.android.server.enterprise.storage.EdmStorageProvider.getBoolean(EdmStorageProvider.java:249) at com.samsung.android.knox.custom.KnoxCustomManagerService.getProKioskState(KnoxCustomManagerService.java:2070) at com.samsung.android.knox.custom.ProKioskManager.getProKioskState(ProKioskManager.java:463) at com.android.server.pm.PackageManagerService.chooseBestActivity(PackageManagerService.java:11862) at com.android.server.pm.PackageManagerService.resolveIntentInternal(PackageManagerService.java:11734) at com.android.server.pm.PackageManagerService.access$12900(PackageManagerService.java:663) at com.android.server.pm.PackageManagerService$PackageManagerInternalImpl.resolveIntent(PackageManagerService.java:33709) at com.android.server.wm.ActivityTaskSupervisor.resolveIntent(ActivityTaskSupervisor.java:819) at com.android.server.wm.ActivityStarter$Request.resolveActivity(ActivityStarter.java:620) at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:760) at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1873) at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1744) at com.android.server.wm.ActivityTaskManagerService.startActivity(ActivityTaskManagerService.java:1697) at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1132) at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6223) at android.os.Binder.execTransactInternal(Binder.java:1215) at android.os.Binder.execTransact(Binder.java:1179)
对应的Binder调用堆栈如下:
at android.os.StrictMode.readAndHandleBinderCallViolations(StrictMode.java:2497) at android.os.Parcel.readExceptionCode(Parcel.java:2382) at android.os.Parcel.readException(Parcel.java:2343) at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:2897) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1743) at android.app.Activity.startActivityForResult(Activity.java:5473) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:728) at android.app.Activity.startActivityForResult(Activity.java:5431) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:709) at android.app.Activity.startActivity(Activity.java:5817) at android.app.Activity.startActivity(Activity.java:5770)
我之前看到过类似的关于onCreate()回调触发该问题的讨论,但这次是startActivity()调用直接触发的,实在摸不着头绪。想请教下大家有没有遇到过类似情况,或者能帮我分析下背后的原因?
测试设备信息:
- 三星M31
- Android 12
备注:内容来源于stack exchange,提问作者Ashwin Srevatsa
相关产品推荐
相关产品推荐

