AsyncTask
当用户强制应用程序退出或进入后台时,我在如何清理我使用的内存时遇到了一些麻烦。
具体来说,我有一个应用程序正在使用AsyncTask
记录音频数据并实时绘制信号图。对于录制,我正在使用AudioRecord
该类,这需要您开始录制,然后停止并释放录制对象。我的问题是我不知道如何停止和释放这个对象。
我考虑过并尝试过的选项:
onPause
在、onStop
和方法中停止释放对象onDestroy
,但这会导致异常。onPostExecute
在 的方法中停止和释放对象AsyncTask
。这个问题是我不确定当用户强制退出应用程序时是否调用过这个方法,因为这个doInBackground
方法永远不会完成。我无法找到任何与此相关的文档。
我的AsyncTask
样子如下:
AsyncTask<Void, Void, Void> drawer = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
recorder.startRecording();
}
@Override
protected Void doInBackground(Void... arg0) {
while(true) {
int nRead = 0;
int offset = 0;
while(nRead != readSize) {
nRead += recorder.read(buffer, offset + nRead, readSize - nRead);
}
for(int i = 0; i < readSize; i++) {
data[i] = buffer[i];
}
publishProgress();
}
}
@Override
protected void onProgressUpdate(Void... arg0) {
view.setData(data);
view.invalidate();
}
};
该代码效果很好,我只是不确定确保我正确清理记录对象并且根本不泄漏的最佳方法。我的困惑是AsyncTask
当 UI 线程暂停或停止时会发生什么,此外,如果您能够停止AudioRecord
来自不同线程的对象,您就盯着它看。
任何帮助将不胜感激。
谢谢,