TUT ANDROID 024: Service trong android

Service là một trong 4 thành phần chính của android. Service không có giao diện chuyên dùng để thực hiện một nhiệm vụ nào đó được thực hiện ngầm dưới background mà không cần tương tác đến giao diện ví dụ như: chơi nhạc nền, download file, xử lý tính toán…

Vòng đời của service:

3

Note:

Khi có một context nào đó gọi startService() để start service mong muốn. Nếu service đó chưa được tạo thì sẽ gọi onCreate() rồi gọi tiếp onStart() và khi đó service chạy nền bên dưới.

Nếu sau đó lại có một context muốn start service này mà service đã đang chạy, chỉ có  phương thức onStart() của service được gọi.

Dù service có được gọi start bao nhiêu lần thì cũng chỉ có 1 instance của service và chỉ cần gọi stopService() một lần để kết thúc service.

Có  2 kiểu để start Service:

1: Sử dụng phương thức startService() : thường được xử dụng để thực thi một hành động đơn và có thể không return lại kết quả (ví dụ như chơi nhạc)

2: Sử dụng bindService(): cung cấp một interface dạng client-server cho phép apps có thể “conversation” (nói chuyện, tương tác) với service

Trong ví dụ này để các bạn có thể hiểu rõ về cách startService() mình sẽ trình bày làm một ứng dụng đơn giản với 2 buton để startService() và stopService(); khi service được start thì sẽ chạy bản nhạc và sẽ dừng phát nhạc khi service được stop.

Bound Service mình sẽ trình bày trong các tutorial tiếp theo

Để làm được ví dụ này các bạn làm lần lượt theo các bước sau

Bước 1: tạo folder raw trong thư mục res sau đó copy một file nhạc vào đó (trong ví dụ này mình sử dụng file nhạc có tên hoabanglang.mp3)

Các bạn có thể down file hoabanglang.mp3 theo link sau

6

Bước 2: mở file res->values->String.xml

<resources>

<string name="app_name">ServiceDemo</string>
 <string name="action_settings">Settings</string>
 <string name="hello_world">Hello world!</string>
 <string name="StartService">Start Service</string>
 <string name="StopService">Stop Service</string>

</resources>

Bước 3: mở file res->layout-> 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:orientation="vertical"
 android:paddingLeft="5dp"
 android:paddingRight="5dp"
 android:paddingTop="10dp"
 tools:context=".MainActivity" >

<Button
 android:id="@+id/btStartService"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/StartService" />

<Button
 android:id="@+id/btStopService"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_marginTop="10dp"
 android:text="@string/StopService" />

</LinearLayout>

Bước 4: tạo file MyService.java trong packet com.example.servicedemo

package com.example.servicedemo;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
 // khai bao bien kieu MediaPlayer de quan ly file nhac
 MediaPlayer player;

@Override
 public IBinder onBind(Intent intent) {
 // TODO Auto-generated method stub
 Log.d("MyService", "onBind");
 return null;
 }

@Override
 public void onCreate() {
 // TODO Auto-generated method stub
 Log.d("MyService", "onCreate");
 // khoi tao bien player tu res
 player = MediaPlayer.create(this, R.raw.hoabanglang);
 player.setLooping(false);
 super.onCreate();
 }

@Override
 public void onStart(Intent intent, int startId) {
 // TODO Auto-generated method stub
 Log.d("MyService", "onStart");
 // chay file nhac
 player.start();
 super.onStart(intent, startId);
 }

@Override
 public int onStartCommand(Intent intent, int flags, int startId) {
 // TODO Auto-generated method stub
 Log.d("MyService", "onStartCommand");
 return super.onStartCommand(intent, flags, startId);
 }

@Override
 public void onDestroy() {
 // TODO Auto-generated method stub
 Log.d("MyService", "onDestroy");
 if (player.isPlaying()) {
 // neu dang choi nhac thi stop file nhac
 player.stop();
 }
 super.onDestroy();
 }

@Override
 public boolean onUnbind(Intent intent) {
 // TODO Auto-generated method stub
 Log.d("MyService", "onUnbind");
 return super.onUnbind(intent);
 }

}

Note: tương tự như activity muốn startService thì app cần phải khai báo trong AndroidManifest.xml

</i> <i><service android:name=".MyService"></service> 

Bước 5: Mở file MainActivity.java

package com.example.servicedemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
 // khai bao Button
 private Button btStartService, btStopService;

@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

// link den layout de dieu khien
 btStartService = (Button) findViewById(R.id.btStartService);
 btStopService = (Button) findViewById(R.id.btStopService);

// dang ky lang nghe su kien onClick vao button
 btStartService.setOnClickListener(this);
 btStopService.setOnClickListener(this);
 }

@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;
 }

@Override
 public void onClick(View v) {
 // khai bao Intent de start Service tuong tu start Activity
 Intent mIntent = new Intent(MainActivity.this, MyService.class);
 switch (v.getId()) {

case R.id.btStartService:
 // click button Start Service
 startService(mIntent);

 break;
 case R.id.btStopService:
 // click button Stop Service
 stopService(mIntent);

break;

default:
 break;
 }

}

}

Bước 6: Mở file AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.servicedemo"
 android:versionCode="1"
 android:versionName="1.0" >

<uses-sdk
 android:minSdkVersion="8"
 android:targetSdkVersion="17" />

<application
 android:allowBackup="true"
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name"
 android:theme="@style/AppTheme" >
 <activity
 android:name="com.example.servicedemo.MainActivity"
 android:label="@string/app_name" >
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>

<service android:name=".MyService"></service>
 </application>

</manifest>

Note:

Các bạn có thể theo dõi kết quả thực hiện chương trình trên logcat và màn hình. . Khi làm theo ví dụ các bạn có gì không hiểu có thể để lại câu hỏi trên web mình sẽ trả lời các bạn một cách nhanh nhất có thể. Các bạn có thể down full src theo link dưới đây

ServiceDemo

Kết quả thực hiện chương trình

1

2

Comments
  1. 4 years ago
  2. 4 years ago

Leave a Reply

Your email address will not be published. Required fields are marked *