android - una - Partidos por turnos desaparecen después de cargar por primera vez
que hacer cuando se compra una bateria nueva para celular (2)
Estoy desarrollando un juego para Android con Google Play Services para crear una partida por turnos.
Al principio, todo estaba bien. Cargo las coincidencias basadas en turnos para el usuario que inició sesión usando
Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(),
new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN,
TurnBasedMatch.MATCH_TURN_STATUS_INVITED,
TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE})
.setResultCallback(this);
Siempre se cargaron todas las coincidencias que sean cualquiera de los estados dados. Pero desde el último fin de semana se llama a la devolución de llamada, pero no hay coincidencias, ya que no estoy participando en ninguna coincidencia (la respuesta de estado es correcta). Eliminé la memoria caché de Google Play Services en mi teléfono y reinicié el dispositivo. En ese momento, todos los partidos se mostraron de nuevo hasta la próxima vez que abrí la aplicación. Nuevamente todos los partidos faltaban. Una vez que comienzo una nueva coincidencia, la coincidencia sigue apareciendo con el método anterior (actualizando la lista) hasta que cierre la aplicación. En el próximo lanzamiento ese partido también se ha ido.
Tengo que decir que el juego no se ha publicado todavía, pero está en una fase de prueba en la consola de desarrolladores de Google Play. Encontré el mismo problema en un emulador. Funcionó bien durante días, pero de repente tuvo el mismo problema que mi dispositivo real (con una versión posterior, por lo que no es que un solo cambio de código cause esto).
¿Alguien más notó este comportamiento o tiene una idea sobre cómo resolverlo?
¿Podría estar relacionado con tener múltiples aplicaciones conectadas a un juego? Tenía dos aplicaciones firmadas con certificados de depuración conectados y esta tarde añadí una para un apk firmado. Cuando usé el apk firmado, funcionó de nuevo hasta que implementé una nueva aplicación de prueba (depuración firmada). Después de volver a la apk firmada, el error sigue existiendo.
Como nadie parece saber la respuesta, permítanme reformular la pregunta. ¿Debo almacenar en mi memoria caché TurnBasedMatches en el dispositivo? Acabo de borrar de nuevo el caché de servicios de reproducción y reabrí mi aplicación. ¿Resultado? Una lista de cientos de juegos (ya que tengo que comenzar un juego nuevo cada vez que estoy probando ...)
Mi código para manejar el loadMatchesResult
@Override
public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult)
{
showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode());
//add matches to listview (only caching matchId, no references to turnbasedmatch)
loadMatchesResult.getMatches().getMyTurnMatches().close();
loadMatchesResult.getMatches().getInvitations().close();
loadMatchesResult.getMatches().getTheirTurnMatches().close();
loadMatchesResult.getMatches().getCompletedMatches().close();
loadMatchesResult.release();
}
Encontró otro punto de interés ... comienza a parecer que el problema ocurre cuando se implementa una nueva aplicación apk en el dispositivo ... Una vez que implemento una nueva aplicación (ya sea mediante la instalación de la versión alpha de Google Play o la versión de depuración directa de Android Studio) las coincidencias se fueron. Cuando no cambio la apk, puedo reiniciar mi teléfono / cerrar la aplicación y funciona bien ...
El problema también ocurre si actualizo la aplicación a través de Play Store ... ¡Debería haber más personas que tengan este problema!
Una vez que el resultado se ha recuperado utilizando await () o entregado a la devolución de llamada del resultado, es un error intentar recuperar el resultado nuevamente. Es responsabilidad del llamante o del receptor de devolución de llamada liberar cualquier recurso asociado con el resultado devuelto. Algunos tipos de resultados pueden implementar Releasable, en cuyo caso se debe usar release () para liberar los recursos asociados.
Después de recuperar el resultado, se da un error cuando intenta obtener los resultados nuevamente, hasta que libere los recursos asociados con el resultado devuelto, por lo que limpiar el caché funciona para hacerlos visibles nuevamente. Debe acceder a la memoria caché del dispositivo y mostrar los resultados desde allí también, o borrar los recursos asociados (dentro del programa) cada vez que quiera acceder a los resultados nuevamente.
Tuve el mismo problema hasta que encontré "Juegos guardados" en mi Consola de desarrollador:
- Ir a Servicios del juego -> Detalles del juego -> Juegos guardados
- Establecer el elemento en "On"
Esto debería resolver tu problema,
saludos paul