Ứng dụng Android gặp phải một số vấn đề ANR nên tôi đã triển khai chính sách StrictMode. Chưa bao giờ sử dụng điều này trước đây nên hy vọng ai đó có thể giúp giải thích những điều sau:
Tại sao nhật ký lại hiển thị 2 vi phạm có vẻ giống nhau, ngoại trừ 4 dòng đầu tiên và thời lượng? Tại sao vẫn còn 2 vi phạm - điều này có nghĩa là mã đã được thực thi hai lần?
Cảm ơn vì sự giúp đỡ
08-15 14:24:14.314: DEBUG/StrictMode(767): Vi phạm chính sách StrictMode; ~duration=13876 ms: android.os.StrictMode$StrictModeDiskWriteViolation: Policy=17 vi phạm=1
tại android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)
tại android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1791)
tại com.j256.ormlite.android.AndroidCompiledStatement.execSql(AndroidCompiledStatement.java:151)
tại com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:70)
tại com.j256.ormlite.stmt.StatementExecutor.update(StatementExecutor.java:382)
tại com.j256.ormlite.dao.BaseDaoImpl.update(BaseDaoImpl.java:374)
tại conx.Repositories.JobRepository.update(JobRepository.java:381)
tại conx.Presenters.JobSchedulePresenter.onSave(JobSchedulePresenter.java:200)
tại conx.Activities.JobScheduleActivity.onSaveEvent(JobScheduleActivity.java:111)
tại conx.Activities.JobScheduleActivity.access$100(JobScheduleActivity.java:43)
tại conx.Activities.JobScheduleActivity$2.onChildClick(JobScheduleActivity.java:169)
tại android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
tại android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
tại android.widget.AbsListView$PerformClick.run(AbsListView.java:1877)
tại android.os.Handler.handleCallback(Handler.java:587)
tại android.os.Handler.dispatchMessage(Handler.java:92)
tại android.os.Looper.loop(Looper.java:130)
tại android.app.ActivityThread.main(ActivityThread.java:3835)
tại java.lang.reflect.Method.invokeNative(Phương thức gốc)
tại java.lang.reflect.Method.invoke(Method.java:507)
tại com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
tại com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
tại dalvik.system.NativeStart.main(Phương pháp gốc)
08-15 14:24:14.314: DEBUG/StrictMode(767): Vi phạm chính sách StrictMode; ~duration=12086 ms: android.os.StrictMode$StrictModeDiskWriteViolation: Policy=17 vi phạm=1
tại android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)
tại android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:52)
tại android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1809)
tại com.j256.ormlite.android.AndroidCompiledStatement.execSql(AndroidCompiledStatement.java:151)
tại com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:70)
tại com.j256.ormlite.stmt.StatementExecutor.update(StatementExecutor.java:382)
tại com.j256.ormlite.dao.BaseDaoImpl.update(BaseDaoImpl.java:374)
tại conx.Repositories.JobRepository.update(JobRepository.java:381)
tại conx.Presenters.JobSchedulePresenter.onSave(JobSchedulePresenter.java:200)
tại conx.Activities.JobScheduleActivity.onSaveEvent(JobScheduleActivity.java:111)
tại conx.Activities.JobScheduleActivity.access$100(JobScheduleActivity.java:43)
tại conx.Activities.JobScheduleActivity$2.onChildClick(JobScheduleActivity.java:169)
tại android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
tại android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
tại android.widget.AbsListView$PerformClick.run(AbsListView.java:1877)
tại android.os.Handler.handleCallback(Handler.java:587)
tại android.os.Handler.dispatchMessage(Handler.java:92)
tại android.os.Looper.loop(Looper.java:130)
tại android.app.ActivityThread.main(ActivityThread.java:3835)
tại java.lang.reflect.Method.invokeNative(Phương thức gốc)
tại java.lang.reflect.Method.invoke(Method.java:507)
tại com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
tại com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
tại dalvik.system.NativeStart.main(Phương pháp gốc)
Vi phạm StrictMode cho biết rằng bạn đang thực thi truy vấn SQLite trên chuỗi giao diện người dùng gây ra sự cố ANR.
Hãy thử thực hiện các tương tác với cơ sở dữ liệu trên một chuỗi riêng biệt, điều này sẽ ngăn chặn sự cố ANR và ngăn hiển thị các vi phạm StrictMode này.
Duyệt qua LogCat
đầu ra, có vẻ như nó xảy ra lúc conx.Activities.JobScheduleActivity.onSaveEvent
中
Một số bài đọc hữu ích:
Tôi là một lập trình viên xuất sắc, rất giỏi!