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:

Service, Service trong android, thu thuat android, android tips, android co ban

Note:

Khi có mt context nào đó gi startService() đ start service mong mun. Nếu service đó chưa được to thì s gi onCreate() ri gi tiếp onStart() và khi đó service chy nn bên dưới.

Nếu sau đó li có mt context mun start service này mà service đã đang chy, ch có  phương thc onStart() ca service được gi.

Dù service có được gi start bao nhiêu ln thì cũng ch có 1 instance ca service và ch cn gi stopService() mt ln đ 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

Audio Player

00:00

Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.

00:00

Use Up/Down Arrow keys to increase or decrease volume.

 

Service, Service trong android, thu thuat android, android tips, android co ban

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 mun startService thì app cn phi 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 bn có th theo dõi kết qu thc hin chương trình trên logcat và màn hình. . Khi làm theo ví d các bn có gì không hiu có th đ li câu hi trên web mình s tr li các bn mt cách nhanh nht có th. Các bn có th down full src theo link dưới đây

ServiceDemo

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

Service, Service trong android, thu thuat android, android tips, android co ban

Service, Service trong android, thu thuat android, android tips, android co ban

 

 HỖ TRỢ TRỰC TUYẾN