The following code shows how to Update the UI from a separate thread with AsyncTask.
Main layout xml file
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/btnStartCounter" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Start" android:onClick="startCounter" /> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>
Main Activity Java code
package com.java2s.myapplication3.app; /* w w w. ja v a 2 s . co m*/ import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { TextView txtView1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(android.R.layout.main); txtView1 = (TextView) findViewById(android.R.id.textView1); } private class DoCountingTask extends AsyncTask<Void, Integer, Void> { protected Void doInBackground(Void... params) { for (int i = 0; i < 1000; i++) { publishProgress(i); try { Thread.sleep(1000); } catch (InterruptedException e) { Log.d("Threading", e.getLocalizedMessage()); } } return null; } protected void onProgressUpdate(Integer... progress) { txtView1.setText(progress[0].toString()); Log.d("Threading", "updating..."); } } public void startCounter(View view) { new DoCountingTask().execute(); } } }
The preceding code will update the UI safely from another thread.