當用戶強制應用程序退出或轉到後臺時,如何清理在AsyncTask
中使用的內存,我遇到了一些問題。異步任務內存清理
具體來說,我有一個應用程序使用AsyncTask
錄製音頻數據並實時繪製信號。對於錄音,我使用的是AudioRecord
類,它需要您開始錄音,然後停止並釋放錄音對象。我的問題是我不知道如何停止和釋放這個對象。
選項我曾想過,想:
- 停止在,
onStop
和onDestroy
方法釋放的對象,但是這會導致異常。 - 停止並釋放方法
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();
}
};
代碼的偉大工程,我只是不確定,以確保我正確地清理記錄對象,完全不漏的最好方法。我的困惑是,當UI線程暫停或停止時AsyncTask
會發生什麼情況,另外,如果您能夠阻止來自不同線程的對象,則可以盯住它。
任何幫助將不勝感激。
謝謝
**「用戶強制退出應用程序」** - 您如何定義「強制退出」? – Squonk
只需按下後退或主頁按鈕,抱歉,由於沒有準確定義該按鈕。 – lbrendanl