0

状況: アクティビティは、バックグラウンド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();
4

0 に答える 0