tutorial - ¿Cuál es la forma correcta de hacer un widget que cambia el contenido cada 6-8 segundos, Android
widget android studio tutorial (2)
El ejemplo más cercano de lo que quiero lograr es el widget "Engadget". Actualiza sus datos de Internet cada 5-10 minutos y "se desplaza" a las historias cada 5-7 segundos. Me imagino que establece el intervalo de 5-10 minutos para que el widget''s provider
llame a onUpdate sin las limitaciones inbuild, algo así ...
AlarmManager alarms = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updateRateSeconds * 1000, newPending);
Entonces, el problema real ... actualizar el contenido de los widgets sin llamar aUpdate.
Aquí imagino que dentro del proveedor de widgets existe un temporizador o Runnable que cada vez que se llama se reprograma con algo así
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
...
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 1000);
}
.
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
long millis = SystemClock.uptimeMillis() - start;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
...
mHandler.postAtTime(this,start + (((minutes * 60) + seconds + 1) * 1000));
}
Luego, en el proveedor de widgets dentro de onDeleted
y onDisabled
elimino los botones mHandler.removeCallbacks(mUpdateTimeTask);
¿Hay algo malo con ese esquema? ¿ AlarmManager
hacer un servicio para actualizar el widget desde allí y mantenerlo vivo sin configurar un AlarmManager
para la configuración del widget? Por algún motivo, recibo llamadas dobles en onUpdate
y el ejecutable se ejecuta después de eliminar el widget.
Echa un vistazo a ViewFlipper
. Puede usarlo para actualizar los datos una vez para un conjunto de elementos y luego establecer con qué frecuencia ciclo.
Cualquier cosa que se ejecute continuamente (IE, reproductor de mp3 o radio) o que requiera algún tipo de sondeo (alarma, widget de visualización SO, error meteorológico) se debe escribir como un servicio. Sé que esto es antiguo, pero revisen estos videos para obtener más información sobre las mejores prácticas
http://developer.android.com/videos/index.html#v=M1ZBjlCRfz0