diff --git a/acra-core/src/main/java/org/acra/builder/ReportExecutor.java b/acra-core/src/main/java/org/acra/builder/ReportExecutor.java index d345fdacc..50f2fc420 100644 --- a/acra-core/src/main/java/org/acra/builder/ReportExecutor.java +++ b/acra-core/src/main/java/org/acra/builder/ReportExecutor.java @@ -18,6 +18,7 @@ import android.content.Context; import android.os.Debug; import android.os.Looper; +import android.os.StrictMode; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.widget.Toast; @@ -162,8 +163,10 @@ public final void execute(@NonNull final ReportBuilder reportBuilder) { processFinisher.finishLastActivity(reportBuilder.getUncaughtExceptionThread()); } if (blockingAdministrator == null) { + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites(); final File reportFile = getReportFileName(crashReportData); saveCrashReportFile(reportFile, crashReportData); + StrictMode.setThreadPolicy(oldPolicy); final ReportInteractionExecutor executor = new ReportInteractionExecutor(context, config); if (reportBuilder.isSendSilently()) { diff --git a/acra-core/src/main/java/org/acra/util/ApplicationStartupProcessor.java b/acra-core/src/main/java/org/acra/util/ApplicationStartupProcessor.java index 49adbac50..bc93b4736 100644 --- a/acra-core/src/main/java/org/acra/util/ApplicationStartupProcessor.java +++ b/acra-core/src/main/java/org/acra/util/ApplicationStartupProcessor.java @@ -21,6 +21,7 @@ import android.content.pm.PackageInfo; import android.os.Handler; import android.support.annotation.NonNull; + import org.acra.ACRA; import org.acra.config.CoreConfiguration; import org.acra.file.BulkReportDeleter; @@ -49,8 +50,8 @@ public ApplicationStartupProcessor(@NonNull Context context, @NonNull CoreConfig } public void checkReports(boolean enableAcra) { - //application is not ready in onAttachBaseContext, so delay this - new Handler(context.getMainLooper()).post(() -> { + //application is not ready in onAttachBaseContext, so delay this. also run it on a background thread because we're doing disk I/O + new Handler(context.getMainLooper()).post(() -> new Thread(() -> { if (config.deleteOldUnsentReportsOnApplicationStart()) { deleteUnsentReportsFromOldAppVersion(); } @@ -61,7 +62,7 @@ public void checkReports(boolean enableAcra) { sendApprovedReports(); approveOneReport(); } - }); + }).start()); } private void approveOneReport() {