There are two ways to offload main thread’s task
1) Java Thread Class
2) AsyncTask class
Following Code demonstrates how to use AsyncTask class to offload task of main thread.
activity_main.xml
<RelativeLayout 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" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="48dp" android:layout_toLeftOf="@+id/textView1" android:text="Button" /> </RelativeLayout>
AsyncTaskActivity.java
package com.example.asynctaskactivity; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.button1); //because we implement OnClickListener we only have to pass "this" (much easier) btn.setOnClickListener(this); } public void onClick(View view) { switch(view.getId()) { case R.id.button1: // for(int i=0;i<5;i++) { // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // TextView txt = (TextView) findViewById(R.id.textView1); // txt.setText("Executed"); new LongOperation().execute(""); break; } } private class LongOperation extends AsyncTask { @Override protected String doInBackground(String... params) { Log.d("xml", "DoinBackground"); for(int i=0;i<5;i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return "Executed"; } @Override protected void onPostExecute(String result) { Log.d("xml", "OnPostExecute"); TextView txt = (TextView) findViewById(R.id.textView1); txt.setText("Executed"); // txt.setText(result); //might want to change "executed" for the returned string passed into onPostExecute() but that is upto you } @Override protected void onPreExecute() { Log.d("xml", "OnPreExecute"); } @Override protected void onProgressUpdate(Void... values) { } } }