****MAIN ACTIVITY*******
public class MainActivity extends Activity {
private Button btnSinHilos;
private Button btnHilo;
private Button btnAsyncTask;
private Button btnCancelar;
private Button btnAsyncDialog;
private ProgressBar pbarProgreso;
private ProgressDialog pDialog;
private MiTareaAsincrona tarea1;
private MiTareaAsincronaDialog tarea2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSinHilos = (Button)findViewById(R.id.btnSinHilos);
btnHilo = (Button)findViewById(R.id.btnHilo);
btnAsyncTask = (Button)findViewById(R.id.btnAsyncTask);
btnCancelar = (Button)findViewById(R.id.btnCancelar);
btnAsyncDialog = (Button)findViewById(R.id.btnAsyncDialog);
pbarProgreso = (ProgressBar)findViewById(R.id.pbarProgreso);
btnSinHilos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//obtener la hora actual
/*Calendar c = Calendar.getInstance();
Date hstar = c.getTime();*/
pbarProgreso.setMax(100);
pbarProgreso.setProgress(0);
for(int i=1; i<=20; i++) { //cambio el contador a 20 dado que ahora es el doble que antes (al progresar de 5 la barra)
tareaLarga();
pbarProgreso.incrementProgressBy(5); //El aumento de la barra es de 5 puntos por cada vez
}
Toast.makeText(MainActivity.this, "Tarea finalizada!", Toast.LENGTH_SHORT).show();
}
});
btnHilo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
pbarProgreso.post(new Runnable() {
public void run() {
pbarProgreso.setProgress(0);
}
});
//obtener la hora actual
Calendar c = Calendar.getInstance();
final Date hstar = c.getTime();
for(int i=1; i<=20; i++) { //cambio el contador a 20 dado que ahora es el doble que antes(al progresar de 5 la barra)
tareaLarga();
pbarProgreso.post(new Runnable() {
public void run() {
pbarProgreso.incrementProgressBy(5); //Incrementamos la barra cada vez en 5
}
});
}
runOnUiThread(new Runnable() {
public void run() {
//obtener la hora de finalizacion
Calendar ca = Calendar.getInstance();
final Date hfinhis = ca.getTime();
//imprimo la hora en la que empieza y la que finaliza
Toast.makeText(MainActivity.this,"Tarea empezada a las "+ hstar+"--Tarea finalizada a las "+hfinhis, Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
});
btnAsyncTask.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tarea1 = new MiTareaAsincrona();
tarea1.execute();
}
});
btnCancelar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tarea1.cancel(true);
}
});
btnAsyncDialog.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setMessage("Procesando...");
pDialog.setCancelable(true);
pDialog.setMax(100);
tarea2 = new MiTareaAsincronaDialog();
tarea2.execute();
}
});
}
private void tareaLarga()
{
try {
Thread.sleep(1000);
} catch(InterruptedException e) {}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class MiTareaAsincrona extends AsyncTask<Void, Integer, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
//obtener la hora actual
Calendar c = Calendar.getInstance();
final Date hst = c.getTime();
for(int i=1; i<=20; i++) { //cambio el contador a 20 por que ahora tarda el doble.
tareaLarga();
publishProgress(i*5); //ahora progresa de 5
if(isCancelled())
break;
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
int progreso = values[0].intValue();
pbarProgreso.setProgress(progreso);
}
@Override
protected void onPreExecute() {
pbarProgreso.setMax(100);
pbarProgreso.setProgress(0);
}
@Override
protected void onPostExecute(Boolean result) {
String hst = null;
//obtener la hora de finalizacion
Calendar ca = Calendar.getInstance();
Date hfinhi = ca.getTime();
if(result)
Toast.makeText(MainActivity.this, "Tarea empezada a las "+ hst+"--Tarea finalizada a las "+hfinhi, Toast.LENGTH_SHORT).show();
}
@Override
protected void onCancelled() {
Toast.makeText(MainActivity.this, "Tarea cancelada!", Toast.LENGTH_SHORT).show();
}
}
private class MiTareaAsincronaDialog extends AsyncTask<Void, Integer, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
for(int i=1; i<=20; i++) {//cambio el contador a 20 por que ahora tarda el doble.
tareaLarga();
publishProgress(i*5);//ahora progresa de 5
if(isCancelled())
break;
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
int progreso = values[0].intValue();
pDialog.setProgress(progreso);
}
@Override
protected void onPreExecute() {
pDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
MiTareaAsincronaDialog.this.cancel(true);
}
});
pDialog.setProgress(0);
pDialog.show();
}
@Override
protected void onPostExecute(Boolean result) {
if(result)
{
pDialog.dismiss();
Toast.makeText(MainActivity.this, "Tarea finalizada!", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCancelled() {
Toast.makeText(MainActivity.this, "Tarea cancelada!", Toast.LENGTH_SHORT).show();
}
}
}
*****ACTIVITY MAIN XML*******
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progreso" />
<ProgressBar
android:id="@+id/pbarProgreso"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dip"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:max="100" />
<Button
android:id="@+id/btnSinHilos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sin_hilos" />
<Button
android:id="@+id/btnHilo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nuevo_hilo" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnAsyncTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nuevo_asynctask" />
<Button
android:id="@+id/btnCancelar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancelar" />
</LinearLayout>
<Button
android:id="@+id/btnAsyncDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/asynctask_dialog" />
</LinearLayout>