状況: アクティビティは、バックグラウンドThreadでいくつかのアクションを実行します。アクティビティが閉じられると、Android もスレッドを強制終了します。スレッド停止をログに書き込みたい。コールバックはありますか? (interrupt() と destroy() のオーバーライドは機能しません) または、代わりにAsyncTaskを使用する必要がありますか?
UPD: スレッドコード
private class InternalReader extends Thread {
@Override
public void run() {
final int size = mReader.getDataSize();
final int blockSize = 10240;
int offset = 0;
TextFileCacher.DataBlock db = new TextFileCacher.DataBlock();
db.data = new char[blockSize];
int read = mReader.readString(offset, db.data, -1);
mListener.onRenderStarted();
mListener.onRenderReady();
while (read > 0){
db.size = read;
mCacher.processData(db);
offset+=read;
mListener.onProgress(offset/size);
read = mReader.readString(offset, db.data, -1);
}
mListener.onRenderReady();
}
}
AsyncTask コード
private class InternalReader extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
final int size = mReader.getDataSize();
final int blockSize = 10240;
int offset = 0;
TextFileCacher.DataBlock db = new TextFileCacher.DataBlock();
db.data = new char[blockSize];
int read = mReader.readString(offset, db.data, -1);
mListener.onRenderStarted();
mListener.onRenderReady();
while (read > 0){
db.size = read;
mCacher.processData(db);
offset+=read;
mListener.onProgress(offset/size);
read = mReader.readString(offset, db.data, -1);
}
mListener.onRenderReady();
return null;
}
}
初期化
(new InternalReader()).start();
と
(new InternalReader()).execute();