The following code shows how to Perform Long-Running Tasks in a Service. You will simulate the service of downloading a file from the Internet.
Populate the MyService.java file with the following code:
package com.java2s.myapplication3.app; //from w ww . ja v a2s . com import java.net.MalformedURLException; import java.net.URL; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class MyService extends Service { @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { try { int result = DownloadFile(new URL("http://www.your server.com/somefile.pdf")); Toast.makeText (getBaseContext(), "Downloaded " + result + " bytes", Toast.LENGTH_LONG).show(); } catch (MalformedURLException e) { e.printStackTrace(); } return START_STICKY; } private int DownloadFile(URL url) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return 100; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText (this, "Service Destroyed", Toast.LENGTH_LONG).show(); } }
In the AndroidManifest.xml file, add the following statement:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.java2s.Services" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".ServicesActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" /> </application> </manifest>
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" > <Button android:id="@+id/btnStartService" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Start Service" android:onClick="startService"/> <Button android:id="@+id/btnStopService" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Stop Service" android:onClick="stopService" /> </LinearLayout>
Main Activity Java code
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; /*from w ww.j a va 2 s . co m*/ public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void startService(View view) { startService(new Intent(getBaseContext(), MyService.class)); } public void stopService(View view) { stopService(new Intent(getBaseContext(),MyService.class)); } }
Clicking the Start Service button will start the service. To stop the service, click the Stop Service button.
The activity is frozen for a few seconds before the Toast class displays the "Downloaded 100 bytes" message.
The service runs on the same thread as your activity. In this case, because the service is suspended for five seconds, so is the activity.