diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java index 1825726d4..43179014f 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardActivity.java @@ -2095,6 +2095,7 @@ public class BoardActivity extends XWActivity m_jniThread.waitToStop( save ); m_jniThread = null; } + m_view.stopHandling(); clearThis(); diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardCanvas.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardCanvas.java index 0c06a4b41..03a7bfb6c 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardCanvas.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardCanvas.java @@ -165,10 +165,12 @@ public class BoardCanvas extends Canvas implements DrawCtx { public void setJNIThread( JNIThread jniThread ) { - if ( ! jniThread.equals( m_jniThread ) ) { + DbgUtils.assertOnUIThread(); + if ( null == jniThread ) { + } else if ( ! jniThread.equals( m_jniThread ) ) { DbgUtils.logf( "BoardCanvas changing threads" ); - m_jniThread = jniThread; } + m_jniThread = jniThread; } public int getCurPlayer() @@ -538,9 +540,9 @@ public class BoardCanvas extends Canvas implements DrawCtx { m_dictChars = null; m_activity.runOnUiThread( new Runnable() { public void run() { - m_dictChars = XwJNI.dict_getChars( dictPtr ); - // draw again if ( null != m_jniThread ) { + m_dictChars = XwJNI.dict_getChars( dictPtr ); + // draw again m_jniThread.handle( JNIThread.JNICmd .CMD_INVALALL ); } diff --git a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardView.java b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardView.java index 1d35b0ebb..e2d82c187 100644 --- a/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardView.java +++ b/xwords4/android/XWords4/src/org/eehouse/android/xw4/BoardView.java @@ -269,6 +269,15 @@ public class BoardView extends View implements BoardHandler, SyncedDraw { invalidate(); } + public void stopHandling() + { + m_jniThread = null; + m_jniGamePtr = 0; + if ( null != m_canvas ) { + m_canvas.setJNIThread( null ); + } + } + // SyncedDraw interface implementation public void doJNIDraw() {