Merge "Lockup in the print spooler." into lmp-mr1-dev

This commit is contained in:
Svet Ganov
2014-11-25 10:38:54 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 13 deletions

View File

@@ -106,12 +106,26 @@ public final class PageContentRepository {
mRenderer.close(callback); mRenderer.close(callback);
} }
public void destroy() { public void destroy(final Runnable callback) {
if (mState == STATE_OPENED) {
close(new Runnable() {
@Override
public void run() {
destroy(callback);
}
});
return;
}
mState = STATE_DESTROYED; mState = STATE_DESTROYED;
if (DEBUG) { if (DEBUG) {
Log.i(LOG_TAG, "STATE_DESTROYED"); Log.i(LOG_TAG, "STATE_DESTROYED");
} }
mRenderer.destroy(); mRenderer.destroy();
if (callback != null) {
callback.run();
}
} }
public void startPreload(int firstShownPage, int lastShownPage) { public void startPreload(int firstShownPage, int lastShownPage) {
@@ -158,7 +172,7 @@ public final class PageContentRepository {
try { try {
if (mState != STATE_DESTROYED) { if (mState != STATE_DESTROYED) {
mCloseGuard.warnIfOpen(); mCloseGuard.warnIfOpen();
destroy(); destroy(null);
} }
} finally { } finally {
super.finalize(); super.finalize();
@@ -455,6 +469,10 @@ public final class PageContentRepository {
public void close(final Runnable callback) { public void close(final Runnable callback) {
cancelAllRendering(); cancelAllRendering();
if (mOpenTask != null) {
mOpenTask.cancel();
}
new AsyncTask<Void, Void, Void>() { new AsyncTask<Void, Void, Void>() {
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
@@ -492,10 +510,6 @@ public final class PageContentRepository {
mContext.unbindService(AsyncRenderer.this); mContext.unbindService(AsyncRenderer.this);
} }
if (mOpenTask != null) {
mOpenTask.cancel();
}
mPageContentCache.invalidate(); mPageContentCache.invalidate();
mPageContentCache.clear(); mPageContentCache.clear();
mDestroyed = true; mDestroyed = true;

View File

@@ -493,13 +493,13 @@ public final class PageAdapter extends Adapter {
return selectedPages; return selectedPages;
} }
public void destroy() { public void destroy(Runnable callback) {
mPageContentRepository.destroy();
mCloseGuard.close(); mCloseGuard.close();
mState = STATE_DESTROYED; mState = STATE_DESTROYED;
if (DEBUG) { if (DEBUG) {
Log.i(LOG_TAG, "STATE_DESTROYED"); Log.i(LOG_TAG, "STATE_DESTROYED");
} }
mPageContentRepository.destroy(callback);
} }
@Override @Override
@@ -507,7 +507,7 @@ public final class PageAdapter extends Adapter {
try { try {
if (mState != STATE_DESTROYED) { if (mState != STATE_DESTROYED) {
mCloseGuard.warnIfOpen(); mCloseGuard.warnIfOpen();
destroy(); destroy(null);
} }
} finally { } finally {
super.finalize(); super.finalize();

View File

@@ -1635,10 +1635,16 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
mSpoolerProvider.destroy(); mSpoolerProvider.destroy();
mPrintedDocument.finish(); mPrintedDocument.finish();
mPrintedDocument.destroy(); mPrintedDocument.destroy();
mPrintPreviewController.destroy(); mPrintPreviewController.destroy(new Runnable() {
} @Override
public void run() {
finish(); finish();
} }
});
} else {
finish();
}
}
private final class SpinnerItem<T> { private final class SpinnerItem<T> {
final T value; final T value;

View File

@@ -192,10 +192,10 @@ class PrintPreviewController implements MutexFileProvider.OnReleaseRequestCallba
}); });
} }
public void destroy() { public void destroy(Runnable callback) {
mHandler.cancelQueuedOperations(); mHandler.cancelQueuedOperations();
mRecyclerView.setAdapter(null); mRecyclerView.setAdapter(null);
mPageAdapter.destroy(); mPageAdapter.destroy(callback);
} }
@Override @Override