Android – Service


Được đăng vào ngày 01/06/2016 | 0 bình luận
Đánh giá bài viết

Service (dịch vụ) là một ứng dụng chạy ngầm bên dưới hệ điều hành thực hiện các công việc riêng biệt, một Service không có giao diện để tương tác với người dùng. Một ứng dụng có thể khởi tạo một đối tượng Service và chạy, đối tượng Service chạy liên tục ngay cả khi người dùng chuyển đổi sang ứng dụng khác, Service cũng có thể được “gắn” với một ứng dụng và trao đổi qua lại với ứng dụng đó. Thường thì chúng ta dùng Service để thực hiện các công việc như mở/truyền dữ liệu/đóng kết nối mạng, mở nhạc, đọc/ghi file…

Tuy nhiên bạn cần hiểu là Service không phải là luồng (Thread), tức là nó không phải là một tiến trình chạy song song với ứng dụng đã gọi nó, Service chỉ đơn giản là một đối tượng chạy ngầm dưới hệ điều hành, nói là chạy ngầm bởi vì chúng ta không thấy nó bằng mắt vì nó không có giao diện người dùng (UI). Tóm lại bạn có thể hiểu Service là một Activity nhưng không có file layout để tương tác với người dùng như Activity.

Service có 2 loại:

Started
Service loại này được tạo ra từ phương thức startService() của một đối tượng Activity. Khi đã được tạo ra thì đối tượng Service này có thể chạy vô thời hạn, ngay cả khi đối tượng đã tạo ra nó bị hủy. Thông thường thì Service sẽ thực hiện một công việc đơn lẻ nào đó rồi tự hủy chứ không trả kết quả nào về cho đối tượng đã gọi nó cả. Chẳng hạn như Service dùng để tải file/ upload file…
Bound
Service loại này sẽ được “gắn” dính vào một đối tượng nào đó bằng phương thức bindService(). Các đối tượng Service này cung cấp các phương thức để đối tượng đã được gắn vào nó có thể giao tiếp với đối tượng Service đó. Bound Service chỉ chạy khi có ít nhất một đối tượng được gắn vào nó, nếu không có đối tượng nào được gắn vào nó thì nó sẽ bị hủy.

Ví dụ

Chúng ta tạo một project mới có sử dụng Service được tạo ra từ lớp android.app.Service.

Trong file layout chính chúng ta thiết kế như sau:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">
    <Button 
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:onClick="stopNewService"
        android:text="Stop Service"/>
    <Button 
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_marginTop="23dp"
        android:onClick="startNewService"
        android:text="Start Service" />
</LinearLayout>

Giao diện chính chỉ gồm 2 Button để tạo và hủy một Service.

Tiếp theo là lớp MainActivity:

package com.phocode;

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

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
 
    public void startNewService(View view)
    { 
        startService(new Intent(this, NewService.class)); 
    }
 
    public void stopNewService(View view)
    {
        stopService(new Intent(this, NewService.class));
    }
}

Trong lớp MainActivity, chúng ta tạo một Service bằng cách gọi phương thức startService(), tham số của phương thức này là một đối tượng Intent. Chúng ta hủy Service bằng cách gọi phương thức stopService(), phương thức này cũng nhận một đối tượng Intent.

Các đối tượng Intent này tham chiếu tới đối tượng Service mà chúng ta sẽ định nghĩa sau đây:

package com.phocode;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class NewService extends Service
{
    public NewService() {}
 
    @Override
    public IBinder onBind(Intent intent)
    {
        throw new UnsupportedOperationException("Not yet implemented");
    }
 
    @Override
    public void onCreate()
    {
        Toast.makeText(this, "Service created", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onStart(Intent intent, int startID)
    {
        Toast.makeText(this, "Service started", Toast.LENGTH_SHORT).show(); 
    }
 
    @Override
    public void onDestroy()
    {
        Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show();
    }
}

Một đối tượng Service sẽ kế thừa từ lớp android.app.Service, và phải override các phương thức onCreate(), onStart()onDestroy(). Ở đây chúng ta chỉ in ra các câu thông báo Toast đơn giản.

Screenshot_2016-06-01-14-48-56







Trả lời


Lưu ý: bọc code trong cặp thẻ [code language="x"][/code] để highlight code.


Ví dụ:


[code language="cpp"]


    std::cout << "Hello world";


[/code]



Các ngôn ngữ được hỗ trợ gồm: actionscript3, bash, clojure, coldfusion, cpp, csharp, css, delphi, diff, erlang, fsharp, go, groovy, html, java, javafx, javascript, latex, matlab, objc, perl, php, powershell, python, r, ruby, scala, sql, text, vb, xml.

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *