我有一个 Android 服务,当时可以运行 1 到 2 个小时。目前这个应用程序处于调试阶段。在服务运行时,我随机收到此错误:
F/art ( 2816): art/runtime/indirect_reference_table.cc:86] Check failed: slot_mem_map_.get() != nullptr Failed anonymous mmap(0x0, 12288, 0x3, 0x2, 32, 0): Operation not permitted
...
+ hundreds of lines that belongs to this message regarding the same `indirect_reference_table.cc`.
所以对我来说,我似乎以某种方式耗尽了内存。我唯一能想到的就是将 logcat 写入 SD 卡上的文件。这是我在服务的 onStartCommand 中启动并在 onDestroy 中销毁的过程。如下所示:
private Process process;
public int onStartCommand(Intent intent, int flags, int startId) {
...
File appDirectory = new File( Environment.getExternalStorageDirectory() + "/Log" );
File logFile = new File( appDirectory, "logcat.txt" );
if (!appDirectory.exists() && !appDirectory.mkdir())
Log.e("Tag", "Not possible to write file");
try {
process = Runtime.getRuntime().exec("logcat -f " + logFile);
} catch (IOException e) {
e.printStackTrace();
}
return Service.START_STICKY;
}
@Override
public void onDestroy() {
...
process.destroy();
super.onDestroy();
}
谁能说这个错误主要是因为 logcat 导致内存不足?和/或有解决方案来解决这个问题,因为这次崩溃会杀死我的服务?