properly clean up RN

Reviewed By: javache

Differential Revision: D5170608

fbshipit-source-id: 065cf4ba4244c26bf5fdf9f5183a6bb1295676ad
This commit is contained in:
Aaron Chiu 2017-06-02 23:45:20 -07:00 committed by Facebook Github Bot
parent df1070b750
commit 37536e93b7
3 changed files with 14 additions and 1 deletions

View File

@ -287,6 +287,7 @@ public class CatalystInstanceImpl implements CatalystInstance {
// TODO: tell all APIs to shut down
mDestroyed = true;
mNativeModulesQueueThread.runOnQueue(new Runnable() {
@Override
public void run() {
@ -297,7 +298,14 @@ public class CatalystInstanceImpl implements CatalystInstance {
listener.onTransitionToBridgeIdle();
}
}
mHybridData.resetNative();
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
mHybridData.resetNative();
// Kill non-UI threads from UI thread.
getReactQueueConfiguration().destroy();
}
});
}
});

View File

@ -26,4 +26,5 @@ public interface ReactQueueConfiguration {
MessageQueueThread getUIBackgroundQueueThread();
MessageQueueThread getNativeModulesQueueThread();
MessageQueueThread getJSQueueThread();
void destroy();
}

View File

@ -60,6 +60,10 @@ public class ReactQueueConfigurationImpl implements ReactQueueConfiguration {
* is destroyed so that we shut down the proper queue threads.
*/
public void destroy() {
if (mUIBackgroundQueueThread != null &&
mUIBackgroundQueueThread.getLooper() != Looper.getMainLooper()) {
mUIBackgroundQueueThread.quitSynchronous();
}
if (mNativeModulesQueueThread.getLooper() != Looper.getMainLooper()) {
mNativeModulesQueueThread.quitSynchronous();
}