jueves, 13 de febrero de 2014

Hilos

****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>

No hay comentarios:

Publicar un comentario