Services trong Android là một thành phần chạy trong nền để thực hiện các hoạt động dài mà không cần phải tương tác với người dùng và nó hoạt động ngay cả khi ứng dụng bị phá hủy. Một services về cơ bản có thể có hai trạng thái.
StartedMột dịch vụ được bắt đầu khi một thành phần ứng dụng, chẳng hạn như một hoạt động, khởi động nó bằng cách gọi startService (). Sau khi bắt đầu, một dịch vụ có thể chạy trong nền vô thời hạn, ngay cả khi thành phần khởi động nó bị phá hủy.
Bound
Một Services bị ràng buộc khi một thành phần ứng dụng liên kết với nó bằng cách gọi bindService (). Một dịch vụ ràng buộc cung cấp giao diện máy khách-máy chủ cho phép các thành phần tương tác với dịch vụ, gửi yêu cầu, nhận kết quả và thậm chí thực hiện trên các quy trình với giao tiếp giữa các quá trình (IPC).
Service android có các phương thức gọi lại vòng đời mà bạn có thể thực hiện để theo dõi các thay đổi trong trạng thái của dịch vụ và bạn có thể thực hiện công việc ở giai đoạn thích hợp. Sơ đồ sau bên trái hiển thị vòng đời khi dịch vụ được tạo bằng startService () và sơ đồ bên phải hiển thị vòng đời khi dịch vụ được tạo bằng bindService ()
onStartCommand ()
Hệ thống gọi phương thức này khi một thành phần khác, chẳng hạn như một hoạt động, yêu cầu dịch vụ được bắt đầu, bằng cách gọi startService (). Nếu bạn thực hiện phương thức này, bạn có trách nhiệm dừng dịch vụ khi công việc của nó được thực hiện, bằng cách gọi các phương thức stopSelf () hoặc stopService ().
onBind ()
Hệ thống gọi phương thức này khi một thành phần khác muốn liên kết với dịch vụ bằng cách gọi bindService (). Nếu bạn thực hiện phương pháp này, bạn phải cung cấp giao diện mà khách hàng sử dụng để liên lạc với dịch vụ, bằng cách trả về một đối tượng IBinder. Bạn phải luôn thực hiện phương pháp này, nhưng nếu bạn không muốn cho phép ràng buộc, thì bạn nên trả về null.
onUnbind ()
Hệ thống gọi phương thức này khi tất cả các máy khách đã ngắt kết nối khỏi một giao diện cụ thể được dịch vụ xuất bản.
onRebind ()
Hệ thống gọi phương thức này khi các máy khách mới đã kết nối với dịch vụ, sau khi được thông báo trước đó rằng tất cả đã bị ngắt kết nối trong onUnbind của nó.
Hệ thống gọi phương thức này khi dịch vụ được tạo lần đầu tiên bằng cách sử dụng onStartCommand () hoặc onBind (). Cuộc gọi này là bắt buộc để thực hiện thiết lập một lần.
onDestroy ()
Hệ thống gọi phương thức này khi dịch vụ không còn được sử dụng và đang bị phá hủy. Dịch vụ của bạn nên thực hiện điều này để dọn sạch mọi tài nguyên như chủ đề, người nghe đã đăng ký, người nhận, v.v.
public class HelloService extends Service {Thí dụ
/** indicates how to behave if the service is killed */
int mStartMode;
/** interface for clients that bind */
IBinder mBinder;
/** indicates whether onRebind should be used */
boolean mAllowRebind;
/** Called when the service is being created. */
@Override
public void onCreate() {
}
/** The service is starting, due to a call to startService() */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return mStartMode;
}
/** A client is binding to the service with bindService() */
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
/** Called when all clients have unbound with unbindService() */
@Override
public boolean onUnbind(Intent intent) {
return mAllowRebind;
}
/** Called when a client is binding to the service with bindService()*/
@Override
public void onRebind(Intent intent) {
}
/** Called when The service is no longer used and is being destroyed */
@Override
public void onDestroy() {
}
}
Ví dụ này sẽ đưa bạn qua các bước đơn giản để hiển thị cách tạo Dịch vụ Android của riêng bạn. Thực hiện theo các bước sau để sửa đổi ứng dụng Android mà chúng tôi đã tạo trong chương Ví dụ Hello World
Sau đây là nội dung của tệp hoạt động chính được sửa đổi MainActivity.java. Tập tin này có thể bao gồm từng phương pháp vòng đời cơ bản. Chúng tôi đã thêm các phương thức startService () và stopService () để bắt đầu và dừng dịch vụ.
public class MainActivity extends Activity {Sau đây là nội dung của MyService.java. Tệp này có thể thực hiện một hoặc nhiều phương thức được liên kết với Dịch vụ dựa trên các yêu cầu. Hiện tại, chúng tôi sẽ chỉ triển khai hai phương thức onStartCommand () và onDestroy ()
String msg = "Android : ";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(msg, "The onCreate() event");
}
public void startService(View view) {
startService(new Intent(getBaseContext(), MyService.class));
}
// Method to stop the service
public void stopService(View view) {
stopService(new Intent(getBaseContext(), MyService.class));
}
}
public class MyService extends Service {Sau đây sẽ sửa đổi nội dung của tệp AndroidManifest.xml. Ở đây chúng tôi đã thêm thẻ <service ... /> để bao gồm dịch vụ của chúng tôi.
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Let it continue running until it is stopped.
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
}
<?xml version="1.0" encoding="utf-8"?>Sau đây sẽ là nội dung của tệp res / layout / Activity_main.xml để bao gồm hai nút.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tutorialspoint7.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<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>
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of services"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Start Services"
android:onClick="startService"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Services"
android:id="@+id/button"
android:onClick="stopService"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2" />
</RelativeLayout>
No comments:
Post a Comment